使用 JavaScript 打亂數組
Fisher-Yates 打亂演算法提供了一種在 JavaScript 中打亂數組的有效方法。透過隨機交換元素,確保每種可能的排序都有相同的發生機會。
演算法實作
Fisher-Yates shuffle 演算法可以實現如下:
function shuffle(a) { var j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; a[i] = a[j]; a[j] = x; } return a; }
該演算法以相反的順序迭代數組,將每個每個數字元素與其前面的隨機元素交換在陣列中。由於交換的隨機性,產生的陣列會被打亂。
用法
shuffle 函數可用以下語法對陣列進行打亂:
var myArray = ['1','2','3','4','5','6','7','8','9']; shuffle(myArray);
ES6版本
ES6版本function shuffle(a) { for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; } return a; }
ES6版本
Fisher-Yates 演算法已在ES6中進行了最佳化:Object.defineProperty(Array.prototype, 'shuffle', { value: function() { for (let i = this.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [this[i], this[j]] = [this[j], this[i]]; } return this; } });實作原型演算法可以實作為一個陣列原型方法,以方便直接洗牌陣列:此實作允許使用arr.shuffle() 語法對陣列進行打亂。
以上是如何在 JavaScript 中有效打亂陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!