めぐの JavaScript 日記

あーもんど

配列をシャッフルする

配列 (Array) の中身をシャッフルします。

準備

前回作った randomSamples() を使います。

// 非復元抽出
const randomSample = arr => arr.splice(Math.random() * arr.length | 0, 1)[0];
 
// 非復元抽出を指定回数繰り返して配列で返す
const randomSamples = (arr, count) =>
    Array.from(Array(count), () => randomSample(arr));


シャッフルされた配列を得る

配列のコピーをシャッフルする関数です。シャッフル後の配列を返すので,元の配列は変更されません。

コード

// シャッフル後の配列を返す
const shuffled = arr => randomSamples([...arr], arr.length);

使用例

let arr = [1, 2, 3, 4, 5];
console.log(shuffled(arr));  // シャッフルされた配列
console.log(arr);  // [1, 2, 3, 4, 5]


配列そのものをシャッフルする

シャッフルしたいんじゃない。シャッフルされたいんだ……

コード

// 配列のシャッフル
const shuffle = arr => (arr.push(...randomSamples(arr, arr.length)), arr);

使用例

let arr = [1, 2, 3, 4, 5];
shuffle(arr);  // arr をシャッフル
console.log(arr);  // シャッフルされている。 [4, 5, 2, 3, 1] など。


日記 (おまけ)

友達がアイコンを描いてくれました。あとタマネギ高すぎ