学习链接
关于 JavaScript 的数组随机排序
JavaScript专题之乱序
关于数组乱序的深挖——“感觉一直在写毒代码”
数组乱序
function shuffle(arr) {
let new_arr = arr.map(i => ({ v: i, r: Math.random() }));
new_arr.sort((a, b) => a.r - b.r);
arr.splice(0, arr.length, ...new_arr.map(i => i.v));
return arr;
}
function shuffle(arr) {
let i = arr.length;
while (i) {
let j = Math.floor(Math.random() * i--);
[arr[j], arr[i]] = [arr[i], arr[j]];
}
return arr;
}
function shuffle(arr) {
const len = arr.length;
for (let i = 0; i < len; i++) {
let j = Math.floor(Math.random() * (len - i)) + i;
[arr[j], arr[i]] = [arr[i], arr[j]];
}
return arr;
}
概率测试
let times = 100000;
let res = {};
for (let i = 0; i < times; i++) {
let arr = shuffle([1, 2, 3]);
let key = JSON.stringify(arr);
res[key] ? res[key]++ : res[key] = 1;
}
// 为了方便展示,转换成百分比
for (let key in res) {
res[key] = res[key] / times * 100 + '%'
}
console.log(res);