【发布时间】:2013-12-16 02:40:38
【问题描述】:
我有一个 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 购买礼物。
什么是合适的数组随机函数来解决这个问题?
感谢您的帮助!!
【问题讨论】:
-
为什么不添加检查以确保相同的名称不匹配?这不再是随机的,但它似乎是您正在寻找的东西
-
我该如何做呢?我在 for 循环中有一个 if 函数,说明如果名称相等,那么我将再次调用该函数。然而,这并没有包括所有的名字,而且它似乎不是最好的解决方案。
-
您可以找到每个名称的随机名称,而不是洗牌。并每次从可搜索数组中删除找到的名称和当前名称
标签: javascript arrays function random shuffle