使用 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版本
Fisher-Yates 算法已在 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; }
实现原型
该算法可以实现为一个数组原型方法,以方便直接洗牌数组:
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中文网其他相关文章!