網上看的數組亂序輸出,要么不合實際,要么代碼繁瑣。自己試了下,希望能給大家帶來幫助。
重要思想也是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當成,作為循環條件,最后所有的都是隨機的,結果如下: