1.直接打乱数组
function randerArr(arr) {
return arr.sort(() => Math.random() - 0.5);
}
2.对一个数组进行乱序排序,要求每个元素不会落到原来的位置,且落到其他位置的概率相同。
- 思路:假如这个数组的长度是10,那就遍历每一个元素,生成一个0-9的随机数,判断这个随机数是不是现在这个索引,如果是就再随机一次直到不是现在这个索引。得到这个随机数后与随机数位置的数组位置交换,就这样遍历数组一次就打乱了。但是这种思路还是有在原来位置的可能:之前可能在同一位置的是因为随机后索引的位置再交换可能会回到原来索引的位置,如第0个元素随机到3,并与3交换,但到3后可能随机到0就交换回来了。要解决这个问题只要到3的时候不交换就可以了。
- 代码:
function randerArr(arr) {
var newArr = arr.slice(0);
var len = arr.length;
var indexArr = [];
for (var i = 0; i < len; i++) {
console.log(indexArr);
if (indexArr[i]) {
continue;
}
var random = parseInt(Math.random() * len);
while (random === i) {
random = parseInt(Math.random() * len);
}
indexArr[random]=indexArr[i]=true;
var swap=newArr[i];
newArr[i]=newArr[random];
newArr[random]=swap;
}
return newArr
}