原理:
利用sort用法:arr.sort(comparefunction)如果 comparefunction(a,b) 返回的值大於 0 ,則 b 在 a 的前邊;
如果 comparefunction(a,b) 返回的值等於 0 ,則a 、b 位置保持不變;
如果 comparefunction(a,b) 返回的值小於 0 ,則 a 在 b 的前邊。
let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
arr.sort(() => math.random() - 0.5);
//[2, 8, 3, 15, 6, 5, 14, 1, 9, 0, 11, 10, 16, 12, 13, 4, 7]
//[13, 12, 8, 2, 4, 11, 5, 0, 6, 10, 1, 15, 9, 7, 14, 3, 16]
//[8, 3, 13, 12, 4, 6, 7, 9, 11, 10, 16, 5, 2, 15, 1, 14, 0]
//[12, 0, 2, 7, 11, 10, 1, 16, 5, 6, 9, 3, 14, 8, 13, 4, 15]
剛剛看了文章《常用的sort打亂陣列方法真的有用?》,才發現原來此種方法的缺陷,誤導了大家,對不起!下邊是《常用的sort打亂陣列方法真的有用?》文章中提供的一種正確的sort打亂陣列的用法。
正確使用方法:
let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
function
shuffle
(arr)
return arr;
}shuffle(arr);
//[5, 14, 15, 8, 12, 13, 16, 2, 4, 7, 10, 6, 1, 11, 0, 9, 3]
//[0, 13, 3, 15, 4, 9, 14, 1, 7, 10, 2, 5, 11, 8, 12, 16, 6]
//[9, 13, 7, 11, 15, 5, 1, 6, 3, 16, 0, 10, 2, 12, 4, 8, 14]
//[12, 11, 3, 16, 1, 2, 7, 10, 9, 14, 6, 5, 4, 8, 15, 0, 13]
原理:
迴圈遍歷該陣列,在每次遍歷中產生乙個0 ~ length - 1的數,該數代表本次迴圈要隨機交換的位置。將本次迴圈當前位置的數和隨機位置的數進行交換。
let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
for(let i = 0,len = arr.length; i < len; i++)
//[15, 3, 1, 9, 13, 8, 10, 5, 7, 11, 12, 0, 16, 4, 6, 2, 14]
//[15, 6, 3, 7, 8, 5, 9, 0, 13, 4, 12, 1, 11, 16, 14, 10, 2]
//[1, 16, 10, 14, 13, 4, 6, 12, 5, 2, 9, 3, 8, 11, 15, 0, 7]
//[2, 9, 10, 13, 12, 15, 16, 8, 1, 11, 14, 0, 3, 5, 4, 7, 6]
原理:
建立乙個新的陣列儲存打亂的變數;每次迴圈產生乙個隨機位,將隨機位的數儲存至新陣列中;
查詢新陣列中是否存在隨機位的數,如果不存在,就儲存,如果存在就重新迴圈該次迴圈。
let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],newarr = ;
for(let i = 0,len = arr.length; i < len;)else
}//[10, 15, 2, 12, 13, 7, 4, 14, 1, 11, 6, 0, 8, 16, 9, 5, 3]
//[14, 9, 13, 10, 11, 6, 15, 16, 0, 12, 3, 5, 8, 4, 1, 7, 2]
//[4, 13, 11, 7, 8, 3, 16, 9, 14, 5, 2, 10, 12, 6, 15, 0, 1]
//[2, 14, 16, 4, 9, 13, 6, 12, 0, 5, 8, 15, 11, 1, 3, 10, 7]
方法乙個人推薦,高效、簡單!相對只要對sort函式理解,就能快速理解。sort函式詳解我的部落格,歡迎交流!方法二比較容易讓人理解,簡單說就是每次產生乙個隨機位,將當前位和隨機位進行交換。
方法三不推薦使用,迴圈次數太多,消耗記憶體。
我的csdn部落格,歡迎交流!
前端筆記專欄
前端筆記列表
遊戲列表
js打亂陣列的幾種方法
今天有小夥伴問到,陣列打亂都有什麼方法,那麼打亂陣列有太多的方法了,我這裡簡單的說三種 利用sort排序方式打亂陣列 var arr 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 var randomnumber function arr.so...
6 6 案例 打亂陣列的順序
其中注意 rand 的取值範圍是 0,rand max 取餘的話以 2為例,結果只會有 0 1兩種,所以 rand length 範圍是 0,length void shufflearray int array,int length 注意,上面的 demo 每次隨機數的範圍都是 0,length 意...
JS打亂陣列最高效的方法
var arr for var i 0 i 100 i arr.sort function var str arr.join alert str arr.sort function sort 是對陣列進行排序 他的是這樣工作的。每次從陣列裡面挑選兩個數 進行運算。如果傳入的引數是0 兩個數字置不變。...