首页 > 解决方案 > 从数组中删除重复的随机数

问题描述

好的,所以我正在遍历页面 (3) 上具有“可能”类的所有元素。然后我创建了一个名为“other”的变量,它从数组 otherAnswers 中随机获取一个值。然后我将这些值作为文本放入受尊重的元素中。唯一的问题是,大多数时候循环从 otherAnswers 数组中选择相同的变量(有时一次,有时两次,其他三个,并且很少没有时间)。我如何确保一旦 .each 循环遍历数组中的一个值,它就不会再次得到它?

$('.possible').each(function(i, obj) {

    var other = otherAnswers[Math.floor(Math.random()*otherAnswers.length)];
    $(this).text(other); 
    //otherAnswers.splice(this);

});

我已经尝试了注释的代码段,但这只是删除了这些值,因此它们不会显示在我的页面上。我有一种感觉,它与函数中的变量“i”有关,但我不确定。

标签: javascriptdom

解决方案


您可以通过以下步骤来做到这一点:

在循环之前,获取数组的副本otherAnswers,以避免您使用以下内容破坏它。例如,使用扩展语法:

var remainingAnswers = [...otherAnswers];

然后 - 仍然在循环之前 - 随机打乱复制的数组。从这里获取洗牌代码。

shuffle(remainingAnswers);

i最后,在您的循环中,使用您已经拥有的索引访问该洗牌数组中的值:

var other = remainingAnswers[i];

推荐阅读