JS 新手,目前正在大学学习。对于我当前的 JS 项目,我正在构建一个内存卡游戏。我开始思考如何随机洗牌,并且我接近了 Fisher-Yates Shuffle 算法的作用 - this page 上的第二个程序。但是,我不明白 [0] 在 splice 方法之后到底做了什么。它是移动/压缩阵列的原因吗?如果是,我找不到其他相关示例/文档。
function shuffle(array) {
var copy = [], n = array.length, i;
// While there remain elements to shuffle…
while (n) {
// Pick a remaining element…
i = Math.floor(Math.random() * n--);
// And move it to the new array.
copy.push(array.splice(i, 1)[0]);
}
return copy;
}
最佳答案
array.splice(i, 1)
删除 array
的第 i
元素并将其作为单值数组返回(就像 array.splice(i, 2) 会剪掉第 i 个元素和第 i+1 个元素并将它们作为二元素数组)。然后,简单的索引操作 [0]
从该数组中选取单个元素(因为我们不需要数组);然后使用 copy.push
将这个单个元素添加到 copy
中。
更熟悉的索引操作用法:
array = [4, 7, 2, 10];
array[0]
// => 4
array[1]
// => 7
array = [18];
array[0]
// => 18
关于javascript - Javascript 中的 Fisher-Yates Shuffle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989317/