慢慢累積經驗。
題目
假設我有一份這樣的資料:
1 | const data = [1, 2, 3, 4, 5, 6, 7, ...] |
如果我想打亂順序的話有什麼做法?
方法一
可以利用 Math.random - 0.5
搭配 sort 來隨機的交換位置:
1 | const shuffled = data.sort(() => Math.random() - 0.5) |
這應該是最簡潔的做法,原理是利用 Math.random
只會產生 0 ~ 0.99999 的特性。在這個範圍中 -0.5,就有一半的機會得到「正數 / 負數」。
接著再搭配 sort
的 compare function,在這裡面只要回傳正數就會交換位置,負數的話就不換位置,所以透過前面產生的 N 個正數和 M 個負數就會組合出不同的位置。
方法二
這是我自己想到的方法,感覺效能上可能不太好,但也不失為一種作法。
簡單來說就是給一個長度,裡面會不按照順序來放數字,例如:長度為 4,結果產出 [0, 3, 1, 2]
這樣的東西。
這些數字是要拿來當作 index 用的,不如直接看 code 吧:
1 | function createRandomNumArray(total) { |
接著只要利用它來產生新的陣列就行了:
1 | const data = [1, 2, 3, 4] |
總之這也是一種方法,但不建議用在資料量很大的時候,因為要一直排除掉重複的數字可能會浪費很多計算。