Ale*_*ses 2 javascript arrays random shuffle function
我有一个JavaScript问题.我让用户输入一个名称列表,然后将其放入一个数组中.长话短说,我正在编程一种随机的方式让人们弄清楚他们将为谁购买圣诞礼物.例如,原始数组由以下名称组成:
Alex
Joel
Lindsay
Cori
Run Code Online (Sandbox Code Playgroud)
我想随机化名称,以便我得到一个随机列表,类似于以下内容:
Lindsay
Cori
Joel
Alex
Run Code Online (Sandbox Code Playgroud)
然后,我将显示第一个数组中的名称,并将它们与同一位置中的随机名称对齐.例如,在此示例中,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;
};
Run Code Online (Sandbox Code Playgroud)
此函数的问题是数组不会随机化到新位置.例如,使用此方法,我可以拥有以下初始数组:
Alex
Joel
Lindsay
Cori
Run Code Online (Sandbox Code Playgroud)
而我的数组,使用上面的函数随机化它,将导致如下所示:
Cori
Alex
Lindsay
Joel
Run Code Online (Sandbox Code Playgroud)
这意味着Alex与Cori有关,Joel与Alex有关,Lindsay与Lindsay有关,而Cori与Joel有联系.这就是问题所在.如果这是一个程序,看看谁为谁购买圣诞礼物,Lindsay不能为Lindsay买礼物.
什么是适当的数组随机函数来解决这个问题?
感谢您的帮助!!
尝试--m,而不是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;
};
Run Code Online (Sandbox Code Playgroud)
因为如果你使用,m--你可以自己获取i == m和交换数组元素.