打亂陣列順序的三種方法

2022-04-29 10:42:16 字數 2546 閱讀 1683

原理:

利用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 兩個數字置不變。...