【发布时间】:2017-12-06 21:50:13
【问题描述】:
大家好。我正在制作一个记忆游戏,为了实现这一点,我不得不以某种方式对 Array 中的图像进行洗牌。我在 Stack Overflow 上找到了一个旧答案,Fisher–Yates shuffle,并使用了它,它有效,但我不明白如何。有人可以逐步解释这段代码中每个元素代表什么吗?特别是第一行,变量中如何存在三个值。谢谢。
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
这样使用:
var arr = [2, 11, 37, 42];
arr = shuffle(arr);
console.log(arr);
【问题讨论】:
-
第一行没有三个值,而是声明了 3 个不同的变量,其中只有第一个用数组长度初始化
-
副本中的答案包括有关 Fisher-Yates 的资源。在更一般的说明中,由于该算法是众所周知的,您可以通过谷歌搜索以了解更多信息。它甚至还有一个维基百科页面。
-
var 关键字用于在给定范围内声明一个或多个变量(这里是 shuffle 函数范围)。做“var a, b, c;”本质上与执行“var a; var b; var c;”相同但更短。您可以使用“=”语法分配值,例如“var a = 'hello', b;”这又与 "var a = 'hello'; var b;" 相同
标签: javascript arrays shuffle