簡短回答:
let list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = list.sort(() => Math.random() - 0.5)
詳細回答:
我有一個需要將JavaScript數組中的元素打亂的需求。
換句話說,我想將數組元素重新排列,使其與之前的順序不同。
從這樣一個數組開始:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
我希望每次運行操作時都得到不同的結果,像這樣:
[4, 8, 2, 9, 1, 3, 6, 5, 7]
[5, 1, 2, 3, 7, 4, 9, 6, 8]
[3, 1, 4, 7, 8, 6, 2, 9, 5]
下面是我想出的過程。給定數組list
:
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
我們可以調用sort()
方法,該方法接受一個返回值在-0.5和0.5之間的函數:
list.sort(() => Math.random() - 0.5)
這個函數對數組中的每個元素運行。您可以像這樣傳遞數組的2個元素:list.sort((a, b) => Math.random() - 0.5)
,但在這種情況下,我們不使用它們。如果此操作的結果<0,則將元素a
放置在比b
更低的索引中,如果結果>0,則相反。
調用sort()
不會改變原始數組的值。
現在,您可以將此操作的結果賦值給新變量,例如:
const shuffled = list.sort(() => Math.random() - 0.5)
或者,如果將其聲明為let
變量,還可以覆蓋現有的list
:
let list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = list.sort(() => Math.random() - 0.5)