//生成数列:生成对象转数组
arr = Array.from({length:10}, (v, k) => k+1);
来源:https://www.cnblogs.com/7qin/p/9710034.html
function shuffle(arr) {
var i = arr.length, t, j;
while (i) {
j = Math.floor(Math.random() * i--);
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
//对应的ES6如下
function shuffle(arr) {
let i = arr.length;
while (i) {
let j = Math.floor(Math.random() * i--);
[arr[j], arr[i]] = [arr[i], arr[j]];
}
}
来源:https://blog.csdn.net/b954960630/article/details/79416755
(1)洗牌算法:
这种方法打乱10000个元素的数组来测试仅需要7,8毫秒的时间。
var testArray=[-2,23,34,300,500,1000];
if (!Array.prototype.derangedArray) {
Array.prototype.derangedArray = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
return this;
};
}
alert(testArray.derangedArray());//结果不唯一
(2)这个简单明了,且复杂度为 O(n)
function shuffle(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
var index = parseInt(Math.random() * (len - i));
var temp = arr[index];
arr[index] = arr[len - i - 1];
arr[len - i - 1] = temp;
}
return arr;
}
var arr = [-2,1,3,4,5,6,7,8,9];
console.log(shuffle(arr));//结果不唯一
参考资料
详解js数组的完全随机排列算法
Javascript 生成数列的方法们,填充数组
关于JavaScript的数组随机排序