我有一个 JavaScript 问题。我让用户输入一个名称列表,然后将其放入一个数组中。长话短说,我正在编写一种随机方法,让人们弄清楚他们将为谁购买圣诞礼物。例如,原始数组由以下名称组成:
Alex
Joel
Lindsay
Cori
然后我想随机化名称,以便获得一个随机列表,类似于以下内容:
Lindsay
Cori
Joel
Alex
然后,我将显示第一个数组中的名称,并将它们与同一位置的随机名称对齐。例如,在该示例中,Alex与Lindsay相关联,Joel与Cori相关联,Lindsay与Joel相关联,并且Cori与Alex相关联。我目前正在使用以下随机方法:
function shuffle(array){
var m = array.length, t, i;
while(m){
i = Math.floor(Math.random() * m--);
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
};
此函数的问题在于数组不会随机分配到新位置。例如,使用此方法,我可以得到以下初始数组:
Alex
Joel
Lindsay
Cori
我的数组,使用上面的函数对其进行随机化,将产生如下结果:
Cori
Alex
Lindsay
Joel
这意味着 Alex 与 Cori 关联,Joel 与 Alex 关联,Lindsay 与 Lindsay 关联,Cori 与 Joel 关联。这就是问题所在。如果这是一个查看谁为谁购买圣诞礼物的程序,则 Lindsay 不能为 Lindsay 购买礼物。
解决这个问题的合适的数组随机化函数是什么?
感谢您的帮助!!
Try --m
, not m--
:
function shuffle(array){
var m = array.length, t, i;
while(m){
i = Math.floor(Math.random() * --m);
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
};
因为如果你使用m--
你可能会得到i == m
并将数组元素与其自身交换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)