JavaScriptの配列の要素をシャッフル、またはランダムな値で生成する方法をまとめます。 ランダムな整数の配列を生成する方法もあります。
ランダムな値を持つ配列
Math.random()
を使えばランダムな配列を作成できます。
Math.random()
関数は、0–1(0以上、1未満)の範囲で浮動小数点の擬似乱数を返します。
範囲を数学記号で表わすとです。
let array = [];
let length = 5; // 配列長
for (let i = 0; i < length; i++) {
// 値が0から1までの
array.push(Math.random());
}
console.log(array);
// [ 0.671522112170067, 0.3348344883249996, 0.888219131733891, 0.995131049343978, 0.6195171490437534 ]
ランダムな整数を持つ配列を作成する
続いて0から指定の整数までの配列を返します。 範囲はです。
// 0からmax-1までの整数を返す
function getRandomInt(max) {
// ランダムな配列
return Math.floor(Math.random() * Math.floor(max));
}
let array = [];
let max = 5;
let length = 10
for (let i = 0; i < length; i++) {
array.push(getRandomInt(max));
}
console.log(array);
// [ 3, 2, 0, 4, 1, 4, 1, 2, 2, 0 ]
Math.floor()
は小数点以下を切り捨てて整数にします。
引数に少数を渡しても整数が返ってくるようになっています。
また、負の数を渡すとの範囲で返ってきます。
// 0からmax-1までの整数を返す
function getRandomInt(max) {
// ランダムな配列
return Math.floor(Math.random() * Math.floor(max));
}
let array = [];
let max = -5; // 最大値をマイナスにした
let length = 10
for (let i = 0; i < length; i++) {
array.push(getRandomInt(max));
}
console.log(array);
// [ -4, -3, -1, -2, -3, -2, -1, -5, -4, -5 ]
配列の要素をシャッフルする
続いて、配列の要素をシャッフルする方法です。 要素を順番にランダムな位置と交換しています。
// 配列をシャッフル
function shuffle(array) {
for (let i = array.length - 1; i >= 0; i--) {
let rand = Math.floor(Math.random() * (i + 1));
// 配列の数値を入れ替える
[array[i], array[rand]] = [array[rand], array[i]]
}
return array;
}
// 配列の初期化
array = new Array(0, 1, 2, 3, 4)
array = shuffle(array);
console.log(array);
// [ 0, 4, 1, 2, 3 ]
array = shuffle(array);
console.log(array);
// [ 3, 2, 1, 4, 0 ]
おわりに
以下のソートアルゴリズムのシミュレーションを作っていた際に、ランダムな配列が必要だったのでまとめました。 こちらもよければ見ていってください。
【Electron】PCのスリープと起動イベントを検知する
ElectronNodejsJavaScriptTypeScriptschedule2021-09-06
axiosでリクエスト中の処理をキャンセルする
JavaScriptNodejsschedule2021-08-31
Node.jsでChrome.exeを起動してページを開く方法
NodejsJavaScriptWindowsschedule2021-08-25
【p5js】パーリンノイズとeraseを使ったブックカバー#PCD2021
p5jsProcessingPCD2021JavaScriptschedule2021-02-20
【p5js】砂丘の砂紋のアニメーション#PCD2021
p5jsProcessingPCD2021JavaScriptschedule2021-02-17
個人の技術ブログを作り直しました(3回目)
ブログNuxtjsVuejsTypeScriptJavaScriptNetlifyschedule2020-12-19
nuxt/contentでサイトマップを作る
NuxtjsVuejsTypeScriptJavaScriptschedule2020-12-16
remarkでnuxt/contentのマークダウン書式を拡張する
NuxtjsVuejsTypeScriptJavaScriptschedule2020-12-13