在 JavaScript 中,數組改組是隨機化或遊戲開發中經常使用的常見操作。為了有效地對數組進行洗牌,流行的 Fisher–Yates 演算法提供了一種有效的方法。
此演算法背後的核心原理是重複交換數組中隨機選擇的元素元素。這個過程一直持續到所有元素都被交換為止。以下程式碼實作了這個演算法:
/** * Shuffles an array in place. * @param {Array} a Array containing the elements to be shuffled. */ 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 中,可以使用解構賦值來簡化程式碼:
/** * Shuffles an array in place. ES6 version. * @param {Array} a Array containing the elements to be shuffled. */ 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; }
為了增強程式碼可讀性,您可以新增shuffle功能作為原型方法數組:
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() 來隨機播放名為 arr 的數組。
要使用 shuffle 函數,您可以提供一個元素數組作為輸入,例如:
let myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9']; shuffle(myArray);
shuffle 函數會隨機重新排列myArray 中的元素。當您需要隨機資料或遊戲中洗牌的場景時,此功能特別有用。
以上是如何使用 Fisher-Yates 演算法在 JavaScript 中有效地打亂數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!