X



+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2015/03/22(日) 16:19:45.75ID:nW67tQ7U
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。

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


+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/

(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)
0478デフォルトの名無しさん
垢版 |
2017/12/13(水) 19:58:36.06ID:uoR9h+SG
ググれないブス >>475
朴訥おじさん >>470
ガチアスペ >>431

の3人で別スレ立てて、好きなようにやってみろ。
俺はそっちには行かないし、そこが繁盛するならそれでいいし。


お前らが駄目なのは、良い物をより良い物が倒す実力主義ではなく、
良い国に悪い韓国人がたかる背乗り主義だからなんだよ。
だから少しマシになってもすぐお前らによって潰されてしまう。
しかもお前らはそれを未だに自覚できてない。学習能力0だなマジで。


韓国人死ね


脱線するが、経団連もこの辺完全にお花畑老害になっている。
自分達の国を自分達で改善できないゴキブリ韓国人なんて呼んだ所で、
この国が良くなる筈もない。悪くなるに決まっている。
だから移民なんてそんなに簡単じゃない。

お前らがスレを上手く運営できると思っているのなら、
実際にお前らで別スレを立てて繁盛させ、結果的に人をそこに集め、旧来のスレを殺してみせろ。
これは実力主義であり、正しいスレの殺し方だ。
ゴキブリ韓国人流の背乗り主義はマジでやめろ。誰の為にもならない。
0479デフォルトの名無しさん
垢版 |
2017/12/13(水) 22:26:39.76ID:OuVjfgAH
何か気持ち悪い人が棲息していますが昔からなんでしょうか?
質問者と回答者で力を合わせて浄化を目指しましょう
0481デフォルトの名無しさん
垢版 |
2017/12/13(水) 22:54:52.19ID:OuVjfgAH
ちなみに>>474のJavaScript Good Partsの箇所ですが
JavaScriptでJavaScriptを実装するという面白い試みを紹介している箇所だったので
その記事が載っている「ビューティフルコード」をぽちりました
少し読みましたが、これも良書のにおいがプンプンします
こういうセレンディピティが起きるのが質問スレの醍醐味ですね
0482デフォルトの名無しさん
垢版 |
2017/12/14(木) 01:38:00.53ID:bGPtLfUR
静的スコープは、Ruby, Groovy では、{ }, block で作れる。
モジュール・クラスも、{ }で囲むだけで、スコープを作れる

でも、JS では、スコープの機能は、function にしたから、
スコープを作るために、functionをネストしなければならない。
モジュール・クラスのスコープを作る場合も、functionを使わなければならない

つまり、スコープと関数の概念を切り離せていない。
関数スコープだけなのは、Python と同じ

でも、Ruby, Groovy では、ネストしなくてよい

Rubyのblock(処理)を、オブジェクトとして持ち運ぶ場合は、
proc に変換して、どこでも実行できる。
つまり、第一級関数と同じ

JS みたいに、functionを使って、スコープを作るのは、ややこしいだけ
0483デフォルトの名無しさん
垢版 |
2017/12/14(木) 01:39:01.61ID:LEbaYuuB
>>432
あー、うん。数年前の知識だね。
今じゃ当てはまらないから、そのレスは無視するね
ゴミ、捨てるね
0484デフォルトの名無しさん
垢版 |
2017/12/14(木) 01:43:59.68ID:LEbaYuuB
JavaScriptの場合は

let func = () => console.log("ok");

func()
みたいにして実行できるけど、

Rubyだと、

func.call() みたいにしないといけないのがダサいんだよな
callってなんだよwww
0485デフォルトの名無しさん
垢版 |
2017/12/14(木) 02:02:21.42ID:LEbaYuuB
http://hamuhamu.hatenablog.jp/entry/2015/05/01/050530

> Rubyのメソッドは、変数への代入が出来ないので、第一級オブジェクトではない。
> 第一級オブジェクトではないから変数への代入が出来ないといったほうが正しいのかも。
>
> Rubyのメソッドをクロージャとして扱うには Proc や lambda を使います。
> 厳密に言うと Rubyにおいて Proc や lambda を扱ったものは、第一級オブジェクトではないらしい。
0486482
垢版 |
2017/12/14(木) 03:26:42.01ID:bGPtLfUR
まあ漏れが言いたかったのは、JS のfunction を使う場合、
別に関数として呼び出すわけじゃない

多くの場合、スコープが欲しいだけだから、{ } で十分。
一々、function を使わされるのが、誤解を招く

言語に、関数スコープしか無いから
0488デフォルトの名無しさん
垢版 |
2017/12/15(金) 02:30:34.13ID:OK9q/vji
まあ何でもかんでも{}で足りるというわけでもない
その点での即時関数の代わりにGoogleが推してるdo文は実際欲しい
O.oの二の舞いにならなければよいが
0489デフォルトの名無しさん
垢版 |
2017/12/15(金) 02:54:50.32ID:/sicteF5
純粋関数を
1.同じ入力に対しては同じ出力を返す。
2.「副作用」をもたない。つまりプログラムの状態を変えない。
と「初めてのJavaScript」は説明します
そして関数外部にあった変数をクロージャに含んで、
スタティック変数のように使うようにしたことを、「副作用がなくなった」と言います
スタティック変数的な変数であっても
「プログラムの状態」には変わりがないのでは?
とも思うのですが、ここでいう「プログラムの状態」というのは、
関数の外の変数、という意味なのでしょうか?
またオブジェクトのメンバを変更するオブジェクトメソッドは
副作用があるのでしょうか?ないのでしょうか?
0490デフォルトの名無しさん
垢版 |
2017/12/15(金) 07:29:42.36ID:yuhdgz4g
またgoogle一発で回答に辿りつける質問をしてやがる
相当に知能が低いんだろうな

荒らすな ハーゲ
0491デフォルトの名無しさん
垢版 |
2017/12/15(金) 12:20:54.74ID:/sicteF5
>>490
またハゲた発想ですね〜
ツルッパゲです
ググったんですか?見つかったんですか?
それならそれをここに書けばいいのです
ググって見つかってはい終わりじゃないんですよ
情報は検討しなければならないのです
ネットに書かれてあればそれが事実だ、真実だ、とはならないんです
そのために質問スレがあるのです
分かりますね?
0492デフォルトの名無しさん
垢版 |
2017/12/15(金) 19:10:29.62ID:OK9q/vji
>>489
定義は難しいというか、本来プログラミング言語のものではないので無理がある
例えば同じ引数を与えると必ず同じ値を返す関数と言ってもいいが、
内部的にMathを利用していて、それが書き換えられた場合まで突かれると厳しい
まあそこまで厳密ではなくて良いとすれば、反対にMathのような関数外の変数を書き換える
関数と言っても良いが、これでもループを形成すれば副作用的なものは作れる(モナド)

結局純粋関数かどうかなんて実用的なプログラミング言語には関係ない話で考えなくても良い
それよりかは、「外部変数を書き換えないようにする」とかもっと具体的な部分に注目したほうが良い
0493デフォルトの名無しさん
垢版 |
2017/12/15(金) 19:40:38.29ID:yuhdgz4g
>>491
普通に検索すれば一発でたどり着くしわかりきっている事なので普通のスレ住民には問題無い

ローカルルールなど知らんと宣言してるスレ荒らしの無能さに起因する事情など考えてやる必要はない

消えろ ハーゲ
0494デフォルトの名無しさん
垢版 |
2017/12/15(金) 22:49:36.49ID:QRFEcBGB
>>489
>>491
ググレブス
ゴキブリ韓国人死ね

本当にお前の投稿が他の人の役に立つと思っているのなら、結果で示せ。
新スレを立てて、お前の投稿を繰り返し、人が集まるかどうかやってみろ。
本当に良いスレなら自然と人が集まるものだ。

これすら試す勇気もないのだから、お前はゴキブリ韓国人と同レベルだよ。
0495デフォルトの名無しさん
垢版 |
2017/12/16(土) 00:32:27.16ID:ArLhqftT
>>489
クロージャ内の変数が更新されても、副作用はある。
状態が変化した

ただ、外部には副作用がないから、内部に限定した・封じ込めたという意味
0496デフォルトの名無しさん
垢版 |
2017/12/16(土) 03:45:36.96ID:cfKhsYp6
ご回答ありがとうございます
>>492
モナドと言う語をプログラミング周辺で初めて聞きましたが
関数型言語の用語なんですね

>>495
やはりそうですか
引数も変えず、外の変数も変えず、
ただ返り値だけを自由に出来るのが副作用のない関数なのでしょうね

>>493-494
あなたがたは(一人かも知れませんが)何一つ代わり映えのしない不毛な戯言を
ロボットのように延々と繰り返していますが、なんでこのスレにいるんですか?
0497デフォルトの名無しさん
垢版 |
2017/12/16(土) 09:08:48.12ID:TBmZZU6f
>>492
>>495
お前も迷惑だからそのブスと他スレ立てて出て行け

良い事をしているつもりならそれは完全に勘違いだ
犯罪者に対してエサをやることは反社会行為だ
ちゃんと自覚しろ

そもそもお前らがこのスレに固執する意味はないはずだ
なぜここで迷惑行為を続ける?他スレ立てれば済む話だろ
Web板にも捨てるほどスレはあるし

>>496
死ねよブス
0498デフォルトの名無しさん
垢版 |
2017/12/16(土) 12:17:20.92ID:PI7Fni2Y
ブックマークレットに登録したMutationObserverを使って変更を検知できるようになったのですが、
ページがリロードされるとMutationObserverで登録した処理が
無効になってしまいます。どうすればいいでしょうか。
0499デフォルトの名無しさん
垢版 |
2017/12/16(土) 12:25:26.17ID:plaGBrRo
>>498
ブックマークレットは自動的に実行できないので
ページ開いた時に実行できるブラウザ拡張機能を使用する
例えば、Tampermonkey とかな

ちなみに俺はこれを使って、ページを開いたらすぐに
ダウンロードボタンを押すようにしているw
0502デフォルトの名無しさん
垢版 |
2017/12/17(日) 18:01:20.58ID:RetSeKI5
配列についての質問なのですが、
配列にプロパティを持たせたい場合、
どのように宣言すれば良いでしょうか。
下記のようなことがしたいと考えています。

var cell = new Array(3){
プロパティ1つ目 x;
プロパティ2つ目 y;
};

上記のようなことがしたい場合、
x,yの要素を持つクラスを作成し、
配列でインスタンスを作成するしかないでしょうか?

何か良い方法があれば御指南頂ければと思います。
よろしくお願いします。
0503デフォルトの名無しさん
垢版 |
2017/12/18(月) 01:18:31.16ID:TbHEuMcS
あるクラスのインスタンスを、欲しい数だけ作る

それらを、配列(入れ物・コンテナ)に入れる
0504デフォルトの名無しさん
垢版 |
2017/12/18(月) 02:24:48.51ID:AyELD5Wz
var cell = new Array(3);
としたなら、cellはArrayのインスタンス

>x,yの要素を持つクラスを作成し、
>配列でインスタンスを作成するしかないでしょうか?

この辺の意味が分からんけど、

cell.プロパティ1つ目 = x;
cell.プロパティ2つ目 = y;

としない、またはできない理由は何?
0505デフォルトの名無しさん
垢版 |
2017/12/18(月) 03:52:52.68ID:y8UTlrAF
よく分からんが、
3x3の2次元配列を用意してcell[x][y]とアクセスできるCellクラスを作りたいってことか?
0506デフォルトの名無しさん
垢版 |
2017/12/18(月) 05:39:05.31ID:y8UTlrAF
それとも
cell[0]へのアクセサcell.x
cell[1]へのアクセサcell.y
を定義したいということだろうか
0507502
垢版 |
2017/12/18(月) 09:08:59.64ID:GCevG/T9
質問が悪く、すみません。
アクセスの仕方としては、

cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;

のような感じです。

オセロの作成を色々手探りでやっているのですが、
cellには画像、x座標、y座標のデータを持たせて、
画像のクリックイベントで格納しておいたx座標y座標を使いたいと考えています。
cellのインデックスには空、白、黒の3つを割り当てたいと考えています。

長々とすみません。
0508デフォルトの名無しさん
垢版 |
2017/12/18(月) 11:48:27.42ID:QFnOzmP0
{x,y}の配列が作りたいって事ね
一時はTypedObjectとかあったけど、
まあそれに倣わなくても地道にループで初期化するので良いと思うけどね
どうしても最大限抽象化したいのならProxyArray案もあるけど
0509デフォルトの名無しさん
垢版 |
2017/12/18(月) 12:01:43.50ID:gMlWIj9K
>cellのインデックスには空、白、黒の3つを割り当てたいと考えています。

これがよくわからん
0510デフォルトの名無しさん
垢版 |
2017/12/18(月) 12:05:17.13ID:AyELD5Wz
cell[0] = {};
cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;

cell[0]はObjectクラスのインスタンスとも言えるけど、そこまで深く考えなくてもいいと思う
0511502
垢版 |
2017/12/18(月) 23:23:12.95ID:GCevG/T9
日本語が不自由ですみません...

やりたかったのは>>510さんのようなことでした。
これで作ってみようと思います。

ありがとうございました。
0512デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:28:13.94ID:SUjpjhtq
おいおい、ここまで話を進めたのはいいけど、
最初の初期化であれば普通はこう書くだろ?

var cell = [{x: 値1, y:値2}];
0514デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:56:31.62ID:TbHEuMcS
普通に、マス目のクラスを作って、メソッドも加える

そのインスタンスを、64個作って、配列に入れておく
0515デフォルトの名無しさん
垢版 |
2017/12/19(火) 00:41:12.80ID:XZb67Fvp
他のゲームならコマのオブジェクトを作るほうがいいかもしれんけど
オセロなら8x8のマスのオブジェクトに空・白・黒の状態持たせたほうがいいよねぇ
0516デフォルトの名無しさん
垢版 |
2017/12/20(水) 00:05:23.45ID:I9jY9U5H
すみません、もしこのスレで
axiosを使っている人がいましたら
伺いたいのですが

activexobject(microsoft.xmlhttp)を呼び出す方法と
もしそれがなければ改造方法の指南を受けたいです。
よろしくお願いします。
0518デフォルトの名無しさん
垢版 |
2017/12/20(水) 07:56:45.40ID:LPYqovlm
クラウドワークスやランサーズで作成依頼しなよ
0519516
垢版 |
2017/12/20(水) 23:53:51.72ID:I9jY9U5H
すみません、
Vueのコンポーネント作成で使いたいと思いました。
昔のIEでローカル配置データの読み込みができたらと考えていました。
0520デフォルトの名無しさん
垢版 |
2017/12/21(木) 00:18:55.83ID:hxAUg2rz
ローカルファイルとか、OS のネイティブAPI を使うのなら、Electron。
Electron から、Angular, React, Vue を使う

Electronではじめるアプリ開発
~JavaScript/HTML/CSSでデスクトップアプリを作ろう
野口 将人・倉見 洋輔、2017
0521デフォルトの名無しさん
垢版 |
2017/12/21(木) 16:16:41.07ID:id1EZsfE
分かりにくくて申し訳ないです。

<body onload=“function a();”>


function a(){
sum = new Sum()
}


function Sum(){
...........略
}

3つのカタマリ は別ファイルなのですが、実行するとUncaught ReferenceError:Sum is not difinedと出てしまいます。
不備が分かる方、問題点を教えていただけるととても助かります。

上から順にHTML. script.js script-2jsで
javascriptはscriptタグを2つ並べて参照しました。
<script>〜</script>
<script>〜</script>
0523デフォルトの名無しさん
垢版 |
2017/12/21(木) 17:32:55.79ID:id1EZsfE
>>522
順序を入れ替えましたが、ダメでした.......
0524デフォルトの名無しさん
垢版 |
2017/12/21(木) 18:59:15.11ID:oRquw3RP
まともに質問できないゴミクズ質問者に見当違いの答えを返すアホ回答者
ゴミクズ質問者のせいで終わったスレ

原因は確実に9文字のアレだな
0525デフォルトの名無しさん
垢版 |
2017/12/21(木) 19:32:01.61ID:id1EZsfE
>>524
その9文字を教えていただけると助かります
0527デフォルトの名無しさん
垢版 |
2017/12/21(木) 21:10:06.93ID:0DSNwaJI
3つのファイルは同じ場所にあるの?
後aとSumはもういいからhtmlを省略せずに示してくれると分かりやすい
0528デフォルトの名無しさん
垢版 |
2017/12/21(木) 23:24:13.84ID:hxAUg2rz
><body onload=“function a();”>
全角文字を使うな。
半角ダブルクォーテーションにする

<body onload="function a();">
0529デフォルトの名無しさん
垢版 |
2017/12/22(金) 19:09:03.87ID:qarTviTk
>>527
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>gaming</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<script src="script-2.js"></script>
<script src="script-3.js"></script>
<script src="script-4.js"></script>
<body onload="initial()">
<h1>javascript game!</h1>
<p>click here to start game</p>
<canvas id="canvas" style="background-color:#eef;" width="800" height="400" onclick="start();">
<audio id="item_get" preload="auto">
<source src="item _get.mp3" type="audio/mp3"></audio>


</body></html>

コピペする時点で、変な処理が加わった可能性もあるのですが、構造はこのようです。
0530デフォルトの名無しさん
垢版 |
2017/12/22(金) 19:17:47.53ID:qarTviTk
>>529
>>521のa();に当たる部分がinitial();でinitial();に含まれる処理→Sumがdefinedになってしまいます。
どうぞよろしくお願いします
0531デフォルトの名無しさん
垢版 |
2017/12/22(金) 19:19:43.35ID:qarTviTk
>>529
何度も連投で申し訳ないのですが、initial()が含まれるのがscript-4
Sum();が含まれるのがscript-3です
0532デフォルトの名無しさん
垢版 |
2017/12/22(金) 21:19:07.25ID:6yk8gXaG
>>531
めんどくせーから、やり方教えるから自分でやれ

まずひとつのファイルに書いて動くかどうか確認しろ
動かなかったら動くと思うところまで削って確認しろ

動いたら、ファイルを分けるなどして動かなくなる
ところまで戻していけ

そうすりゃどこに原因が有るかわかる
0533デフォルトの名無しさん
垢版 |
2017/12/22(金) 21:35:37.49ID:qarTviTk
>>532
そうですね、自分でいろいろいじってやってみます!
0534デフォルトの名無しさん
垢版 |
2017/12/22(金) 23:01:02.77ID:RZt5N+k9
そんなにファイルを分けているなら、CommonJS でも使えば?

Node.js, Electron, Webpack, Babel, jQuery とか
0535デフォルトの名無しさん
垢版 |
2017/12/23(土) 00:09:58.18ID:p1jtMZEV
オブザーバーの利点が今ひとつ解らない。
カスタムイベント用意して
個別にそのイベントリスナー登録すればすむのに
管理オブジェクトがオブザーバーリスト持ったり
専用の関数を継承したり等
何故態々面倒な事をするのだろうか。
0536デフォルトの名無しさん
垢版 |
2017/12/23(土) 00:51:49.01ID:FPRjmoIB
Mediator
中央管制塔のように全体を統轄する

「Observer Mediator」で検索!

自分でやったら、イベントの削除とかが面倒くさい。
削除しなかったら、ずっとメモリを使い続ける(メモリリーク)

イベントを取り付けた要素の、先祖の要素が削除された場合に、
イベントを削除する機会を失うから、メモリリークになる

jQuery では、そういう場合でも、メモリリークにならないから、すごい!
0537デフォルトの名無しさん
垢版 |
2017/12/23(土) 05:07:57.15ID:SOP9Z5sy
もう随分前からNative-JS間の循環参照の問題は解決して
参照が残ってなければ消えるけどな
ネイティブの実装も極めて特定の場合に参照が残っている場合でも消えてしまうんだが
jQueryはそれをより気にせずアグレッシブに消すというだけで良し悪しがある
0538536
垢版 |
2017/12/23(土) 23:45:25.73ID:FPRjmoIB
Backbone.js ではメモリリークになるけど、

jQuery ではならない、って聞いた
0539デフォルトの名無しさん
垢版 |
2017/12/24(日) 14:34:11.59ID:WeE5WMFr
node.jsでのファイルの存在確認には
fsモジュールのaccessメソッドが使われますが、
ファイルがないと例外が投げられます(同期の場合)
この挙動おかしくないですか?
ファイルがあるならtrue、ないならfalseを返せばいいはずです
例外は何かしら例外的な事象を知らせるために投げられるものですが
ファイルの有無を調べるメソッドにおいて、
ファイルがないことは例外的事象でも何でもありません
何でこんなことになってるのでしょうか?
0540デフォルトの名無しさん
垢版 |
2017/12/24(日) 14:43:46.49ID:o8ETW9H4
下記のコードについて質問です。
配列内容をシャッフルするコードのようなのですが、
forの動作に疑問を持ったので教えて頂ければと思います。

・,(カンマ)で区切ってある箇所は連続して処理されるという認識で間違いないでしょうか?
・for文が止まる理由は、for文の真ん中の条件式の k; が0になる=false と判断されるということでしょうか?

Array.prototype.shuffle = function() {

for(var j, x, k = this.length; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);

return this;
};


質問が分かりづらかったらすみません。
よろしくお願いします。
0542デフォルトの名無しさん
垢版 |
2017/12/24(日) 15:41:38.56ID:A3ERayLu
>>540
意味がわからないのは、そのコードの可読性が低いから、
だめだよ。そんな書き方をしたら

普通に書こう。前提として for(ここ; ここ; ここ) の「ここ」の部分は省略できる

まず、一番目の「ここ」は初期化なのだから forの外に移動できる

Array.prototype.shuffle = function() {
 var j, x, k = this.length;
 for(; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);
 return this;
};

そして、3番目の「ここ」はループの中に入れることができる

Array.prototype.shuffle = function() {
 var j, x, k = this.length;
 for(; k;) {
  j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x
 }
 return this;
};
0543デフォルトの名無しさん
垢版 |
2017/12/24(日) 15:45:14.80ID:A3ERayLu
あとは整形しよう

Array.prototype.shuffle = function() {
 var j, x, k = this.length;
 for(; k;) {
  j = Math.floor(Math.random() * k);
   x = this[--k];
   this[k] = this[j];
   this[j] = x;
 }
 return this;
};

そしてforではなくwhile使ったりと普通の書き方に書き直す

Array.prototype.shuffle = function() {
 var k = this.length;
 while(k) {
  var j = Math.floor(Math.random() * k);
  k--;
  var x = this[k];
  this[k] = this[j];
  this[j] = x;
 }
 return this;
};
0544デフォルトの名無しさん
垢版 |
2017/12/24(日) 16:00:39.17ID:A3ERayLu
ES6使った最新の書き方だとこうなるかな

Array.prototype.shuffle = function() {
 for (let i = this.length; i > 0; i--) {
  const a = i - 1;
  const b = Math.floor(Math.random() * i);
  [this[a], this[b]] = [this[b], this[a]];
}
 return this;
};
console.log([0,1,2,3,4,5,6,7,8,9].shuffle());

そしてlodashにはshuffle関数は用意されてるので何も作る必要はないw

https://lodash.com/docs/4.17.4#shuffle
0545540
垢版 |
2017/12/24(日) 16:21:10.56ID:o8ETW9H4
>>541-544
返信ありがとうございます。
Javascriptはライブラリが豊富なんですね。
もっと勉強してライブラリも扱えるように頑張ります。
0549デフォルトの名無しさん
垢版 |
2017/12/25(月) 20:32:26.17ID:A5UkwOIg
loadash使うなら別に>>540のコードの可読性なんて関係ないし
ケツつけ無くてもそのまま使えばいいよね
それともloadashの中身も読めってことかな?
0550デフォルトの名無しさん
垢版 |
2017/12/26(火) 04:19:36.08ID:TqP2PjCC
今回は仕事でデバッグするわけじゃないんだから可動性は関係ない
勉強では可読性は時間をかけてほぐせばいいだけ
ただ初心者はアルゴリズムの理解力がないからどのみち他人のコードを読むのは辛いのが当たり前
0551デフォルトの名無しさん
垢版 |
2017/12/26(火) 13:57:09.06ID:92mUXoN6
youtube player api で動画を再生しているdivの画像を取得
(youtube動画のフレーム画像を取得)
する方法はありますか?
0553デフォルトの名無しさん
垢版 |
2017/12/26(火) 18:26:24.24ID:rRAcDTGz
素人なりに firefox の addon を書いている最中なのですが
それに適した質問スレなどはありますか
このスレが最適でしょうか
0554デフォルトの名無しさん
垢版 |
2017/12/26(火) 21:25:20.55ID:TqP2PjCC
今の拡張機能界はChromeベースのがWeb標準になって
Firefox/Edgeもそれとかなりの互換性持ってるから
ここで聞いても答えてくれやすいと思うよ
結構難しいAPIも多いしね
0557デフォルトの名無しさん
垢版 |
2017/12/28(木) 12:36:05.48ID:YvqDgyTx
イマドキのJavaScriptの書き方2018
https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9
これの「辞書・ハッシュ用途はオブジェクトではなくてMapを使う」
っていうところですが、
オブジェクトをハッシュとして使うことのデメリットなんて実際上ないし、
Mapの書き方の方がイケてないと思うのですが、どうなのでしょうか?
特にMapオブジェクト生成時に、キーと値を配列で渡しているのが気になります
そもそもオブジェクトをハッシュとして使うというアイデアからJSONが生まれて
JSONが現在も広く使われているのに、
わざわざMapに書き換えるのってアホくさいと思います
そうですね?
0561デフォルトの名無しさん
垢版 |
2017/12/28(木) 13:09:05.03ID:YvqDgyTx
オブジェクトではキーと値の一対一の対応が明確なのに
Mapオブジェクトを使う方法ではそこここに配列が介在していて
そのあたりがぼやけています
これはハッシュ専用のオブジェクトを使うというアリバイだけのために
支払うコストとしては多すぎます
そうですね?

>>560
ハーゲ
0563デフォルトの名無しさん
垢版 |
2017/12/28(木) 16:16:29.91ID:YvqDgyTx
なるほど
それはオブジェクトにはないメリットですね
用途によっては適所がありそうです
ありがとうございました
0565デフォルトの名無しさん
垢版 |
2017/12/28(木) 20:42:21.94ID:E7wukrMJ
本当にゴミクズ ドキュメントに書いてある事を指摘されて
「なるほど」

生きている価値がない
0566デフォルトの名無しさん
垢版 |
2017/12/28(木) 20:45:46.92ID:E7wukrMJ
>>562
ゴミクズは能力最底辺なので、初心者でさえ回答できる質問しか出来ない
したがって簡単に答えられるが
荒らしにエサを与えるな

わかったかね 以後注意するように
0567デフォルトの名無しさん
垢版 |
2017/12/28(木) 21:27:26.25ID:MFN1+dHK
>>566
相変わらすハゲですね〜
オブジェクトをハッシュとして使ってきた用法に関しては
依然としてオブジェクトの方がいいと思いますよ
ただMapにはMapの使い道がある、と言っているのです
分かりますね?
0569デフォルトの名無しさん
垢版 |
2017/12/28(木) 22:08:55.36ID:E7wukrMJ
>>566
荒らしにエサを与えると>>567のようにはしゃぎ出す 二度とエサを与えるな
0570デフォルトの名無しさん
垢版 |
2017/12/28(木) 22:14:09.65ID:E7wukrMJ
>>562
ゴミクズの見分け方は簡単
検索すれば一発でわかる事
一次ドキュメントに書かれている事をまとまりのない長文で聞く

二度とエサを与えるな
0571デフォルトの名無しさん
垢版 |
2017/12/28(木) 23:15:07.71ID:EahqhR5N
>>562
ちなみにお前はどんなスレが欲しいんだ?
或いは、自分が何をやっているのか理解しているか?


君の回答よりもMDNの方が詳しく正確に書いてある。
つまりこのブスはMDNすら読んでいないことが確定的に分かっている。

その上で、回答をするのなら、今後ともMDNすら読んでいない奴が質問を繰り返すことになる。
それが君の望むスレなのか?
或いは、君はゴキブリ韓国人と同様、日本人が集まる場所を破壊するのが目的なのか?

MDNすら読め無い馬鹿が集うスレが欲しいのなら、君らがそれを新たに作るのは自由だ。
ただ、ここはそうじゃない。
最低限ググってから質問しろという、2chではごく当たり前のスレだ。
それを無理に乗っ取って回答を続けることは、背乗りゴキブリ韓国人と同レベルだと理解できてるか?

もっと長期的視点で考えろ。
0572デフォルトの名無しさん
垢版 |
2017/12/28(木) 23:26:54.90ID:VRkNjdBa
var key = 'a';
// var key = '__proto__';
var obj = {};
obj[key] = obj[key] ? obj[key] + 1 : 1;

文書に出現する、単語の数を数える場合、
その単語が未登録なら1、すでに登録されているなら、1増やす

こういう場合に、たまたま、__proto__ という単語を登録しようとするとバグル。
obj.__proto__ を上書きするから

var wordsMap : Map<String, Int> = new Map();
wordsMap["a"] = 1;
trace(wordsMap["a"]);

上は、Haxe のMap のコードだが、ES4 変換後のコードでは、
wordsMap["$" + key]
のように、キーの前に、$ 文字を連結している

他にも、
var obj = {x : {}};
のように、オブジェクト内のオブジェクトを使う事もできるが、
この方法でも、__proto__ ではバグル
0573デフォルトの名無しさん
垢版 |
2017/12/28(木) 23:55:13.26ID:AeGE7eie
つまり、キーとしてそういうものが入らないと
断定できるならば問題ない

キーとなるものはコードに書かれている文字のみで
ユーザーが入力したテキストを入れるとかない限り
心配する必要はないということさ
0576デフォルトの名無しさん
垢版 |
2017/12/29(金) 13:13:32.16ID:PDOKco2M
Object.prototypeの問題は
obj={__proto__:null}
obj=Object.create()
で解決するから別にそこがオブジェクトリテラルと比べて
殊更取り上げる程のMapの特徴と言うわけでもない
■ このスレッドは過去ログ倉庫に格納されています

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