+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
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です)
2017/12/24(日) 15:07:00.78ID:UCQX5tUj
>>540
概ねその認識で良いと思う
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator
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;
};
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;
};
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
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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