这是一个低级且肮脏的普通 JavaScript 问题。我正在使用经典的数组洗牌函数:
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
然后在另一个函数中重复调用它:
function generateQuartile (array) {
var shuffle1 = shuffle(array);
var shuffle2 = shuffle(array);
var shuffle3 = shuffle(array);
//all three shuffles are the same
}
问题是,所有这三个变量都产生相同的结果。数组被打乱一次,然后就不再打乱。我似乎无法确定这是什么。我猜这是某种范围/提升问题,但我真的无法弄清楚。感谢您的帮助!
最佳答案
洗牌工作正常。问题是您每次都返回相同的数组。每次调用时,您都需要使用随机元素创建一个新数组。最简单的事情是在函数开头克隆数组:
array = array.slice();
完成此更改后,shuffle1
、shuffle2
和 shuffle3
将成为三个不同的数组。并且,原数组不会被修改;这可能是好事也可能是坏事,具体取决于您的设计。
或者,您可以保留 shuffle
函数并克隆每个返回值:
var shuffle1 = shuffle(array).slice();
// etc.
关于javascript - Shuffle Array 函数产生相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050553/