+ JavaScript の質問用スレッド vol.124 +

■ このスレッドは過去ログ倉庫に格納されています
2021/11/10(水) 15:24:24.80ID:jxD2VXPG0
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

※前スレ
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
2021/11/15(月) 07:45:40.57ID:slHpwqED0
>>37

var a=0;
let b=1;
let c='C';

function func(){
let c=2;
return [a,b,c];
}

func.a='A';

console.log(
[window.a,window.b,window.c],
[a,b,c],
func(),
[func().a,func().b,func().c],
[func.a,func.b,func.c]
);


この出力を理解するにはクロージャーの仕組みの理解は必要でない?
2021/11/15(月) 19:30:23.51ID:rDFc2Y3T0
>>40-41
あなたの見解は理解した
正しさの根拠が見つからないのでそれだけだが
2021/11/15(月) 21:15:21.66ID:eCFTqC9o0
すいません、下記のようにボタンを押した時の処理をあらかじめ一つずつJSで書いて書いてるんですが、
ボタンの種類と数が莫大な量になるとJSを書くのが大変になってきました

逆にクリックされた任意のボタンオブジェクトを変数に入れる方法ってあったりしますでしょうか
(ボタンがクリックされる→クリックされたボタンのclassやvalueやtextを調べて目的の処理、という順番に変更したい)

下記が現状のコードです


・html
<button class="BtnA" value="固有の番号">ボタンAタイプ</button>
<button class="BtnA" value="固有の番号">ボタンAタイプ</button>
<button class="BtnB" value="固有の番号">ボタンBタイプ</button>

・js
const BtnA = document.getElementsByClassName('BtnA');
for(i=0;BtnA.length>i;i++){
BtnA[i].addEventListener('click', () =>{
//ここに押された時の処理を書く
});
}
const BtnB = document.getElementsByClassName('BtnB');
以下BtnAのコードとほぼ同様
2021/11/15(月) 22:27:30.97ID:slHpwqED0
>>44
クラス数×value数×text種類数だけ処理数があるってことですか?
2021/11/15(月) 22:58:29.48ID:OfX77+Sf0
class="BtnA BtnAll"
class="BtnB BtnAll"

みたいに、BtnAll で、すべてのボタンの処理をまとめれば?

JavaScript のスレは、この板ではなく、web制作管理板の方へ書き込んでください!
この板のスレは、荒らしが出た時に、緊急的に立てられたものだから
2021/11/16(火) 00:43:22.12ID:Ca8LCMpZ0
>>45
そのイメージに近いです

>>46
ある程度まとめた結果が
BtnA BtnB BtnCみたいなグループです。

了解です、Web製作管理板に移動させていただきます。
2021/11/16(火) 07:19:53.13ID:L8BSEbG10
>>44
event.currentTarget
event.target
2021/11/16(火) 13:14:21.44ID:x6nbCzKN0
>>44
処理数が多すぎて管理効率が悪くなってるってことかな?
ボタン数×(value数-1)×(str数-2)の数の処理があって
保守管理しづらいというのなら下記の考え方はどうでしょう?

変数buttonにはボタンオブジェクト
変数getFuncにはクリックイベント処理を固有番号で紐づける
変数buttonをfor of で回して、固有番号で分岐して、リスナーを設定する

button=document.getelementsbytagname('button')
getFunc={
固有番号:function(){}
固有番号:function(){},,,}

for(let i of button){
switch(i.value){
case '固有番号':i.addEventlistener('click',getFunc[固有番号]);break;
2021/11/16(火) 13:26:34.28ID:x6nbCzKN0
>>44
上の説明だとわかりづらいかな

let getButton=function(){button=document.getElementsByTagName('button');}

// valueの固有番号毎に処理を設定
let addEvent=function(){
for(let i of button){
switch (i.value){
case '101':i.addEventListener('click',addFunc[101]);break;}}}

let button;
// 関数をまとめ置く
let addFunc={
101:function(){console.log(this.value)},
102:function(){console.log(this.className)},}
2021/11/16(火) 19:57:25.19ID:ES2RXggH0
switchの中をObject.keys().forEach()でまわして
addFunc[+i.value]で作り直したらすっきりしそう
いじりたくなるコードだけど可読性を考えたらこれはこれなのか
2021/11/16(火) 22:10:30.79ID:iK58PKMQ0
リアクトでのスマホアプリ開発なんですが、エミュレータは何がお勧めですか?
というのも実機を持っていません。

また、実機を使う場合はアンドロイド5などは使い物になりますか?
古い機種に合わせて作っても、上位互換性のないソフトになるんでしょうか?
2021/11/17(水) 07:47:58.17ID:/ZY56h0o0
>>52
「React andoridアプリ開発 エミュレータ」で検索どうぞ
「api16 開発 不具合 or 互換性」で検索どうぞ

これがベストっていう答えがないから
開発者が自分で試行錯誤して答えを出す問題かな
互換性の問題は作るものによっても違うからね
jellyならそんな問題ないとおもうけど
2021/11/17(水) 10:05:17.45ID:syddc80l0
>>53
jellyッテの調べてみますです
2021/11/17(水) 14:33:19.47ID:syddc80l0
>>53
すみません。互換性に関して見つけられなかったです。
android5向けに作った場合、上位互換性ってあるんでしょうか?

javascriptのバージョン?次第とも考えられますけど
2021/11/17(水) 17:43:10.56ID:+3kxan1mM
androidの話はandroid開発スレで聞いてくれ
多分実機なしは無謀、5は古すぎでFA
2021/11/18(木) 06:50:53.17ID:TN6Tj1JF0
>>56
了解す
2021/11/18(木) 07:17:54.57ID:DvlppRWo0
そんなことはない
android5で使えるアプリが目的なんだから
android5で作成するのがベスト

reactNativeエンジンがどうエンコードして
androidで動かしてるのか分らんので
今のreactでandroid5のどの機能を使えるのか
全然わからんけどな
2021/11/18(木) 07:27:37.77ID:dAtvmzd9M
React NativeはAndroid 5.0以上に対応だね

https://github.com/facebook/react-native
2021/11/18(木) 19:32:55.35ID:DvlppRWo0
API21からなんだな
2021/11/19(金) 12:50:28.04ID:zuBm2fI80
文字列化した数式を計算させるにはどうやればいいんですか?
test("x*x+10",2);

function test(suushiki_str,x){
var y = suushiki_str(この場合x*x+10)でx=2を代入;
retuen(y)
}
こういうのがやりたいんだけど
2021/11/19(金) 12:55:11.51ID:CS9Fe95O0
function test(suushiki_str,x){
return eval(suushiki_str)
}
63デフォルトの名無しさん (ワッチョイ 5b10-MXQP [180.12.82.129])
垢版 |
2021/11/19(金) 13:17:09.00ID:zuBm2fI80
>>62
ありがとー
2021/11/19(金) 13:41:30.73ID:5MAibbygM
何がしたいのか分からないけど、設計自体が間違ってる気がするけどなあ
2021/11/19(金) 21:34:02.13ID:FkG8ODwP0
eval is evil
evalをそのまま使う事はまずないな
2021/11/20(土) 07:02:21.23ID:0rDRyz8e0
evalを使えとなw
2021/11/20(土) 07:04:06.68ID:0rDRyz8e0
evalが生きていること自体、JSが未成熟の証
2021/11/20(土) 07:46:31.86ID:0rDRyz8e0
>>61
evalは非推奨だから

function test(fun,x){
return fun(x);
}

test(function(x){return x*x+10},5);
としときましょう
69デフォルトの名無しさん (ワッチョイ 5b10-MXQP [180.12.82.129])
垢版 |
2021/11/20(土) 18:55:29.17ID:BgP9vp1q0
evalって外部から入力させなければ使っても問題ないんじゃないの?
2021/11/20(土) 18:57:47.86ID:0rDRyz8e0
使いたければつかったらいいよ
2021/11/20(土) 19:05:52.91ID:Gd107dzfr
やっぱjavascriptできるとなんでも作れるな
めちゃくちゃ便利だわ
2021/11/20(土) 19:54:48.88ID:0rDRyz8e0
ブラウザ限定だし
HTMLと一緒でメンテナンスとか関係なければな

もしJSで金融システムみたいな厳格なシステム作ろうとしたら
開発者はみんな気がくるってしまうんじゃないかな
2021/11/20(土) 19:57:24.06ID:Gd107dzfr
マジでjavascriptだけでめちゃくちゃ儲けてる
使いこなせばガチで素晴らしい
74デフォルトの名無しさん (ワッチョイ 372f-IS5D [218.220.251.107])
垢版 |
2021/11/20(土) 20:02:17.98ID:4VXr5Xxs0
仕事で使ってるサイトをJavascriptで自動化できませんか?
たとえば出勤と退勤のときの時間を管理するのに「勤次郎」というサイトを使ってるんだけど
毎回ログインしたあといちいち入力するのが面倒くさい。
2021/11/20(土) 20:22:43.02ID:0rDRyz8e0
>>74
データーの保存はどこを想定してますか?
2021/11/20(土) 20:24:55.79ID:b48agA+u0
seleniumでいいじゃん
2021/11/20(土) 20:46:00.92ID:Gd107dzfr
認証しないシステムなんて攻撃か踏み台にされるとか考えないのか
2021/11/20(土) 21:05:08.87ID:t4XZd1270
定型をポチポチ入力してボタン押すのがダルい程度ならブックマークレットでいいだろ
2021/11/21(日) 08:08:40.09ID:zYUtuXs90
>>74
ブラウザを自動操作なら、iMacros は?

例えば漏れは、Ruby のselenium-webdriver で、
ブラウザを自動操作して、ヤフーにログインしてる

ユーザー名を入力して、ボタンを押す。
パスワードを入力して、ボタンを押すとか

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 10 # default timeout

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym";

element = driver.find_element(:id => "username")
element.send_key "ユーザー名"

driver.find_element(:id => "btnNext").click # ボタンを押す

element = driver.find_element(:id => "passwd")
element.send_key "パスワード"

driver.find_element(:id => "btnSubmit").click # ボタンを押す
80デフォルトの名無しさん (ワッチョイ 5b10-MXQP [180.12.82.129])
垢版 |
2021/11/21(日) 18:31:02.25ID:8Vc5P3wO0
>>768
それだと数式を""で囲んで文字列にすると計算できない
81デフォルトの名無しさん (ワッチョイ 5b10-MXQP [180.12.82.129])
垢版 |
2021/11/21(日) 18:31:35.22ID:8Vc5P3wO0
>>68
82デフォルトの名無しさん (ワッチョイ cedb-+VBe [217.178.96.78])
垢版 |
2021/11/21(日) 19:15:18.38ID:s72Bw1rA0
classが非推奨になるのはいつですか?
2021/11/21(日) 19:23:58.62ID:6CiZCeOJ0
>>82
その予定はない
2021/11/21(日) 21:16:08.25ID:CIU/fTVN0
>>81
>>70で答えてる

eval非推奨な意味を理解していて使うならそれでいいんじゃね?
2021/11/21(日) 21:19:33.19ID:QvzeRvg10
>>61
function test(suushiki_str, x){
var f = Function('x', 'return ' + suushiki_str);
return f(x);
}

test('x * x + 10' ,2);
//=> 14
2021/11/21(日) 22:55:28.72ID:EhgufZNWr
javascriptが使えるとやりたいことが簡単にできる
87デフォルトの名無しさん (ワッチョイ cedb-+VBe [217.178.96.78])
垢版 |
2021/11/22(月) 11:19:44.15ID:svQfIHqM0
>>86
JavaScript最強伝説。
2021/11/22(月) 14:30:42.59ID:zL7mhfu3r
ブラウザで動く
LambdaやGoogle Functionsで動く
デスクトップアプリも作れる
OfficeWeb版やGASでも動く

インフラ構築不要で最強すぎるだろ
89デフォルトの名無しさん (ワッチョイ cedb-+VBe [217.178.96.78])
垢版 |
2021/11/22(月) 16:46:08.87ID:svQfIHqM0
>>88
でも、文法が分かりにくい。
というか無駄に複雑過ぎる。
2021/11/22(月) 16:48:25.46ID:zL7mhfu3r
>>89
文法なんかふつう

複雑な意味がわからん
ほかの言語だと単純なの?
2021/11/22(月) 17:43:25.62ID:+p8qnn8E0
すいません、下記のように読み込んだshiftJISのcsvファイルを
正規表現を使って置換しようとしてるのですがうまくいきません

文字コードの問題なのか指定したマッチパターン意外の色んな文字が勝手に置換されてしまいます

const requestCSV = new XMLHttpRequest();
requestCSV.overrideMimeType('text/plain; charset=Shift_JIS');//csvの文字コードがshiftJSであることは変更できない

requestCSV.addEventListener('load', (event) => {

 const orgCSV = event.target.responseText;
 tempKey="["+key+"]";//keyは変数を使う必要があります
 keyName = new RegExp(tempKey, "g");//複数マッチさせる必要があります

 result=orgCSV.replace(keyName, "ほげ");
}

正規表現オブジェクトを使わずにreplaceさせると問題なく動くのですが、
マッチパターンを変数にしたいのと、複数回以上にマッチさせるため g をつけるため、
正規表現オブジェクトを使わざるを得ない状態です。

どなたかアドバイスお願いできますでしょうか
2021/11/22(月) 17:45:45.05ID:svQfIHqM0
>>90
Javaの方が分かりやすかった。
2021/11/22(月) 18:41:55.55ID:kseOISZ70
Javaと比べたらJavaScriptのほうが文法複雑じゃないと思うが…
TypeScriptと混同してない?
2021/11/22(月) 18:43:22.51ID:kseOISZ70
それかDOM APIをJavaScriptの文法に含むと勘違いしてるとか
95デフォルトの名無しさん (ブーイモ MM26-IS5D [163.49.208.33])
垢版 |
2021/11/22(月) 18:50:50.35ID:jaRoUi/NM
Javaのほうが圧倒的にすっきりしている。
ほんとに両言語をちゃんと勉強したことあるか?
アルツハイマーでもこれくらい分かる。
2021/11/22(月) 18:53:04.86ID:yUT2zM6b0
>>91
keyを[]で囲む必要なし
2021/11/22(月) 18:54:55.94ID:LGR+CB3F0
>>94
古いJSとの互換性を取ろうとすると
古い文法も理解しないとならないからな
オブジェクトの生成も多種多様
JSの細かいところまで理解しようとすると
javaやpythonとかのほうが整理されていてわかりやすい

let obj var objのLexicalの違いや
let obj={}
let fun=function(){}
function fun(){}
class cs extends fun{}
class cs{
__proto__=a;
}

obj.constructor.prorotype=obj
newObjext ,Object.create

こんなのシンプルなわけがない

と92はいいたんだと思う
2021/11/22(月) 19:05:02.79ID:+p8qnn8E0
>>96
"["+key+"]"

というようにカッコで囲んだ形式で検索したいのでここはあえてそうしてるんです…
2021/11/22(月) 19:40:22.23ID:kseOISZ70
Java
class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

JavaScript
console.log("Hello World!");

hello worldからしてこれだからな
あなたの「シンプル」の定義を見せてもらえないと…
2021/11/22(月) 20:19:16.63ID:LGR+CB3F0
>>99
JSのクラスは疑似クラス
他言語のClassと同じように扱えるように
functionを疑似的にclass表現できるようにしてるだけ

Javaと異なりJSはconstructorを有するオブジェクトの生成方法が沢山ある
それすら理解できずに、99の問いとは、、、もっとJSを勉強しようぜ
Javaのほうが圧倒的に整理され覚える文法が少ない

つか、JavaとJS、両方ともそこそこ使えたら
99みたいなこと言えないだろw
2021/11/22(月) 20:26:36.75ID:LGR+CB3F0
>>99
もうちょっと言わせてもらえば
Javaは変数エラーをチェックしやすい言語設計
JSは変数エラーを無限に生成し得る言語設計

JSはマークアップを動的に処理することから発生し
高度な言語設計にしても互換性の問題から
古い文法を生かしているので、とても複雑怪奇になっている

そう表現したらわかるかな?
2021/11/22(月) 20:44:07.24ID:LDcgDFlhM
変数エラーとは
2021/11/22(月) 20:52:35.36ID:LDcgDFlhM
>>98
上手く行かない具体例出してよ
ぶっちゃけ[ ]の使い方ミスってる様な気がするんだけど
2021/11/22(月) 23:07:56.11ID:+p8qnn8E0
>>103
置換した具体例で言うと例えば

さっきの例で置換部分が
result=orgCSV.replace(keyName, "ほげ");

元のテキストが下記だとすると
<title>[name]</title>

結果が下記になってしまってなんじゃこりゃ…て感じですね
<titlほげ>[ほげaほげほげ]</titlほげ>

正規表現オブジェクトを使わなければ普通に成功します
result=orgCSV.replace("[name]", "ほげ"); //<title>ほげ</title>になる

しかし先述のようにマッチパターンを変数化しつつgをつけて複数置換する必要があるため難しいんです…
2021/11/22(月) 23:44:57.26ID:yUT2zM6b0
>>104
 tempKey="\\["+key+"\\]";
106デフォルトの名無しさん (ワッチョイ 5b10-iUmB [180.12.82.129])
垢版 |
2021/11/22(月) 23:59:47.75ID:LPlgTaUb0
javascriptで計算の値がオーバーフロウするかどうかを調べるにはどうすればいいんですか?
例えば10000の10乗を計算しようとしてオーバーフロウするならばalertで計算できませんと
表示したいんだけど
2021/11/23(火) 00:04:12.05ID:KUvc8h5G0
>>104
[] は文字クラス
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes

更に、keyにメタキャラクタがあれば同じ事になるので、文字列全体をエスケープすべき
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#escaping

上記は正規表現の基本
正規表現を体系的に学習すれば、絶対に気がついたこと
急がば回れ
2021/11/23(火) 00:07:12.09ID:KUvc8h5G0
>>106
BigIntと文字列比較
2021/11/23(火) 00:24:05.58ID:t+JcGiN60
>>100
なんでクラスの話に?詭弁では?
クラスベースの奴らがうるさいからclassなんて入れる羽目になったんだが。
そいつらのせいで木に竹を接ぐようなことさせられてむしろ複雑になった。
プロトタイプベースとしてシンプルでよかったのにほんと独善的でろくなことしない。
Reactでもクラスコンポーネントは廃れ99%のケースでFCになったよ。
110デフォルトの名無しさん (ワッチョイ cedb-+VBe [217.178.96.78])
垢版 |
2021/11/23(火) 01:06:21.92ID:cKz+CerT0
>>109
エセクラスベースは絶対に反対。
classは早期に非推奨にすべき。
2021/11/23(火) 01:17:09.89ID:SfFCbJaV0
>>105
>>107
ああ、なるほど、エスケープをダブルでつけないといけなかったんですね
シングルではつけてみていたんですがそれで動かなかったのであれって思ってました
資料の提示もありがとうございます!
2021/11/23(火) 07:20:19.58ID:A/hfu3xU0
>>102
その問いはマジ質問?

>>109
JavaとJsの言語設計に関して
どっちがすっきりしてるかを話ししてるだけだろ
疑似クラスなんてあること自体がお笑いだし
オブジェクト生成方法も多岐にわたるとか
どこが整理されてる言語なのかと
2021/11/23(火) 07:33:58.18ID:MZ1To5x7M
変数エラーでググっても出てこなかったです
何処の業界用語ですか?
2021/11/23(火) 08:34:50.37ID:Ln8GWMq+0
>>104
Ruby では、Regexp.escape で、

正規表現において、特別な意味を持つ文字の直前に、
エスケープ文字(バックスラッシュ)を挿入した、文字列を返す

p esc_1 = Regexp.escape( "[-a]" ) #=> "\\[\\-a\\]"

reg_1 = Regexp.new( esc_1 )
p reg_1.match( "x[-a]y" ) #<MatchData "[-a]">
2021/11/23(火) 09:26:25.23ID:AKV1HaX9M
>>112
お笑いと言えばJavaの無名クラスだろ
なんだったのアレ
関数がファーストクラスオブジェクトじゃなかった欠陥言語の苦肉の策とは言えとんでもなくキッタネェコード
今じゃラムダ関数使ってだーれも使ってないし
最初からそうしとけばよかったのにね
ぜんぜん整理されてなかったのかな?w
2021/11/23(火) 10:33:28.85ID:9dlC3Wki0
言語の完成度はJava>JS
学びやすさもJava>JS

だからと言って優劣を表現してるわけじゃないよ
マークアップ操作言語として
JS、HTML、CSS等との新旧互換性を担保しながら
成長してきた言語だから
継ぎ接ぎ言語になっているのは仕方ないこと
JSでできることは多いし楽しい言語であることを否定してるわけじゃないんだ
でもJSが整理されてシンプルな言語であるとは言えないってだけ
2021/11/23(火) 10:45:11.29ID:jndULnQpr
javascriptさえあれば何もいらん
javascriptだけでスケーラブルなシステムが作れる
2021/11/23(火) 10:52:32.71ID:AKV1HaX9M
あまりにも面倒くさいため、誰もJavaでGUIを作らなくなりました。
やる気とAWT,Swingなど道具立てはあったのです。
ただJavaがクソ過ぎた。
イベントドリブンで必須のリスナー登録はこんな感じ(笑)
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("clicked");
}
});
一方C#ではデリゲートで簡単に書くことができました。
Javaはデリゲートが言語機能として無いのでマネできませんでしたw
結果今では誰もJavaでクライアントGUIプログラムを書きませんがC#はバリバリ使われてますw
結局Java8でJavaScriptをパクってlambdaで以下のように書けるようにしました(ハズカシーw)
button1.addActionListener(e -> System.out.println("clicked"));
しかし時すでにお寿司、誰もJavaでGUIを作っていないのであるwww
Javaはサーバーサイドに集中して成功者?
ノンノンw
Javaが糞でめんどくさくて誰も書かなくなったから廃れた、これがシンプルな答えですw
2021/11/23(火) 11:43:58.38ID:9dlC3Wki0
うん、わかった
確かにその通りです
2021/11/23(火) 15:55:58.57ID:MdPJopiF0
Android StudioではまだJava言語で開発が必要だったような
2021/11/27(土) 15:29:53.92ID:czi6N/jr0
0から9の入ったランダムの配列に適当に選んだnという数字が最大何個並んでいるか
これはどういう方法が早いのでしょうか
気にするほどでもないのでしょうか
配列を見ていくのは遅いとか言う話も聞いたような気もします
一般的にはどういう方法を取るのでしょうか

・配列の前から順にforでnであるか、あればカウンターインクリメント、なければカウンターリセット
・joinで配列を文字列化したあとforでi文字数ぶんのnを検索文字として includesがfalseになるまでか最悪配列数まで調べる
・文字列化したあとmatchで/n+/gで一覧を出して一覧の配列をmap(e=>e.length)で文字数にしてMath.maxで調べる
2021/11/27(土) 17:26:03.23ID:YexJKObKM
>>121
まずは自分で試して比べろよ
2021/11/27(土) 20:27:12.12ID:czi6N/jr0
コードはこんな感じでいいですか?
https://jsfiddle.net/rj457v0q/
windows10 firefox 64bit 94.0.2のabout:newtabのコンソールでやった結果
11374, 1970, 2920
とかそれに似たような時間なんですが
同じ環境でJSFiddle に保存した際に実行された時間が
320, 1994, 2938
と1番目が早くなって結果が真逆になっています
どういう事なんでしょうか
2021/11/27(土) 21:17:39.73ID:czi6N/jr0
IronというChromeベースのブラウザでも試したところ
FirefoxからJSFiddleを開いてそこで走らせた時間と同じような結果になりました
2021/11/27(土) 22:00:25.94ID:w/hwUzDX0
element.addEventListener(
"mousemove",
function(e){alert(e.offsetX);}
);

このfunction(e)の部分はfunction(aaa,e,bbb){}のように引数を複数設定することはできますか?
e以外を渡すにはグローバルしかできないんですか?
2021/11/27(土) 23:25:49.55ID:QiKYnGor0
>>123
Firefox の Math.max() が激重っぽい(1万回の関数呼び出しが重い?)
三項演算子とかにすれば JSFiddle と同じくらい早くなる
2021/11/27(土) 23:48:23.24ID:czi6N/jr0
>>126
ありがとうございます。
Math.maxを使わず、
配列のまま計算させたほうがいいみたいですね。
3つ目もMath.maxを使ってますが使わないようにしても、
こちらはMath.max関数の呼び出し回数が1周1回なせいか短縮されませんでした。
2021/11/28(日) 12:42:42.78ID:TNNdgbH5M
>>123
1つめのバグっとるよ
2つめのは連続する数が大きいのでも確かめないとパフォーマンス特性が分からない

jsbench.meみたいなところで試すといい
アルゴリズムのオーダー考えれば単純ループが一番高速
2021/11/28(日) 21:15:40.16ID:P+UGlIn90
>>125
引数を複数設定できる。ただし、第一引数以外は何も渡されない。(デフォルト引数なんかの例外もある)
thisを渡せる。bind()とhandleEvent()を含むオブジェクトで渡せる。
2021/11/28(日) 21:21:54.23ID:PdYmCZpH0
>>128
ありがとうございます
サイトは次使う時に使って見たいと思いますw
2021/11/28(日) 21:29:03.95ID:eSM912u0M
>>125
どんな使い方をするのか想定コードを教えて

あと代入されるaaa,bbbの値はいつ確定する?
呼び出し時に確定するなら変数で置いとくしか無いし
関数定義する時点で確定してるなら引数にする必要が無い
2021/11/29(月) 12:33:33.13ID:nUjIBrRJ0
>>131
canvasの領域内をクリックしながらマウスを移動させたときの
canvas内のマウスの座標を得たいんだけど
mousedownでvar clickcyuu = 1;mouseupでclickcyuu=0;
mousemoveでclickcyuu===1ならばdrag_mouse_x = e.offsetX;drag_mouse_y = e.offsetY
とやりたかったのでfunction(e,clickcyuu){}としたかった
2021/11/29(月) 13:18:58.10ID:kIPjw4qWM
>>132
それだと結局グローバル変数参照してるのと同じじゃない?
わざわざ引数経由する理由がない
2021/11/29(月) 13:23:14.24ID:T3PYHNfj0
>>132
>>129の方法ではダメなのか?
2021/11/29(月) 15:20:06.33ID:0iOICyJy0
定期的にaddEventListener自体から引数渡したいって人出てくるけど
仮にできたとしてもaddEventListenerした時点で値が固定されることが考えから抜け落ちてるよね
>>132
引数渡したいならイベントハンドラに関数式使えば済むけど
複数のイベント仕込むなら一連の動作をこんな感じでclassかオブジェクトにした方が楽よ
https://jsfiddle.net/hgro7t5m/
2021/11/29(月) 15:41:30.31ID:cAtmNTK4M
クロージャ使えば普通にできるやろ
それに参照型ならaddEventListenerした後からでも値を変えられるよ
2021/11/29(月) 18:56:58.07ID:QQHq1BUR0
var か
2021/11/29(月) 20:17:26.02ID:T3PYHNfj0
>>135
オブジェクトを束縛すれば、プロパティは固定されない(>>129)
handleEventも使ってみればその有用性に気がつくと思うが
2021/12/04(土) 12:18:05.48ID:Zxe83BGy0
読み込みたいファイルのパスだけがわかっている場合に

reader= new FileReader();
reader.readAsText("aaa/hoge.csv") ;

みたいな感じで読み込もうと思ったんですが、
readAsTextの引数はblobだかfileオブジェクトでないとだめみたいで、
レファレンスを読んで見るも、
パスからblogだかfileオブジェクトだかを作成する方法がわかりませんでした。

ファイル読み込み自体は他の方法を使ってできるものの、
FileReaderとreadAsTextの組み合わせを使ってトライしてみたいので
どなたかアドバイスお願いできますでしょうか
2021/12/04(土) 12:36:24.21ID:6Q/yxXZX0
>>139
それが出来たら、ファイルの情報を盗み出せるようになるな
2021/12/04(土) 12:48:45.94ID:Zxe83BGy0
>>140
例えばxmlhttpRequest()でもパスからファイルを読み込むことが出来るので
FileReaderでそれが出来ないのは不思議な気になるんですがそういうものなんですかね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況