i を arr.length にするとうまくいきません

ランダムな添字を一度変数 j などで受けてみましょう。
2021年8月8日
ユーザー

大変、お世話になります。
色々と試しながら、勉強を深めています。

今回、表題の通り、iの初期値をarr.lengthに設定してみました。
ソースは下記の通りです。

function shuffle(arr) {
  for (let i = arr.length; i > 0; i--) {
    [arr[Math.floor(Math.random() * i)], arr[i - 1]] =
    [arr[i - 1], arr[Math.floor(Math.random() * i)]];
  }
  return arr;
}

i5 から、実際に 4 → 3 → 2 → 1 と当てはめながら進めてみましたが、問題はないように思うのですが、結果はおかしくなってしまいます。

レッスンのソースでの勉強は終えていますが、なぜ、私の今回のソースがうまく行かないのか、i の初期値を arr.length で始める場合のケースについて、教えて頂ければ幸いです。

宜しくお願い致します。

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?

このレッスンの質問と回答(7)