这是一个肮脏的香草javascript问题。我使用经典的数组shuffle函数:
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
}
问题是,这三个变量都产生了相同的结果。数组被洗牌一次,然后不再洗牌。我似乎无法确定这是什么。我猜它是某种范围/提升问题,但我真的无法弄明白。谢谢你的帮助!
答案 0 :(得分:2)
改组工作正常。问题是你每次都返回相同的数组。在每次调用时,您需要使用随机元素创建一个新数组。最简单的方法是在函数开始时克隆数组:
array = array.slice();
通过此更改,shuffle1
,shuffle2
和shuffle3
将是三个不同的数组。此外,原始数组不会被修改;根据您的设计,这可能是好事也可能是坏事。
或者,您可以单独保留shuffle
功能并克隆每个返回值:
var shuffle1 = shuffle(array).slice();
// etc.