網上看的數組亂序輸出,要麼不合實際,要麼代碼繁瑣。自己試了下,希望能給大家帶來幫助。
重要思想也是Math.random*arr.length随機下标,然後删除取到的元素,繼續随機下标。
//将數組亂序輸出
var arr = [1,2,3,4,5,6,7,8,9,10];
var newArr = [];
for(var i=0; i<arr.length; i++){
var index = Math.floor(Math.random()*arr.length);//随機下标
newArr.push(arr[index]);//将随機出的元素,存放新數組newArr中去
arr.splice(index,1);// 将随機出的元素在arr中删除
}
//arr中删除随機出的元素,arr.length-1,同時i++,導緻循環不會10次,會是5次.最後得到newArr中隻有一半的随機數字,arr中剩下另一半. 将其合并到一起,得到res
var res =[...newArr,...arr];
console.log(res)
結果如下:

随後也有個問題,這個其實隻随機了一半的數字,後一半沒有随機,隻是合并了上去。
改進後:
var arr = [1,2,3,4,5,6,7,8,9,10];
var newArr = [];
var len = arr.length;
for(var i=0; i<len; i++){
var index = Math.floor(Math.random()*arr.length);//随機下标
newArr.push(arr[index]);//将随機出的元素,存放新數組newArr中去
arr.splice(index,1);// 将随機出的元素在arr中删除
}
//arr中删除随機出的元素,arr.length-1,同時i++,導緻循環不會10次,會是5次.最後得到newArr中隻有一半的随機數字,arr中剩下另一半. 将其合并到一起,得到res
var res =[...newArr,...arr];
console.log(res)
把len當成,作為循環條件,最後所有的都是随機的,結果如下: