从数组中随机选择项目,仅在之前未使用过的情况下使用[重复]

Posted

技术标签:

【中文标题】从数组中随机选择项目,仅在之前未使用过的情况下使用[重复]【英文标题】:Randomly select item from array and only use if it has not been used before [duplicate] 【发布时间】:2015-05-02 20:16:19 【问题描述】:

我正在创建一个刽子手游戏,我正在从预定义的数组中选择一个随机单词。

像这样:

// Select random word to guess
function getWord() 
  var a = new Array('one', 'two', 'three', 'four');
  return a[parseInt(Math.random() * a.length)];

我想做的是阻止它选择相同的单词两次或更多次。 目前,当使用一个小的单词数组时,有时会连续重复同一个单词 2 或 3 次。

我不太确定如何解决这个问题。

首先我想也许可以将这个词插入一个新变量,然后进行比较,但不确定这是一个好方法。

任何想法都会有所帮助。谢谢!

【问题讨论】:

您可以shuffle the array,并检索从 0 到长度 - 1 的值。 你可以使用indexOf方法 【参考方案1】:

您可以使用array splice删除随机位置的元素,然后当您的数组长度为0时,重新初始化它 像这样:

var all_words = [];
function getWord() 
    if (all_words.length === 0) 
        all_words = new Array('one', 'two', 'three', 'four');
    
    var randIndex = parseInt(Math.random() * all_words.length);
    var chosenWord = all_words.splice(randIndex, 1);
    return chosenWord;

这里是demo。

【讨论】:

var a = new Array('one', 'two', 'three', 'four'); function getWord() return a.splice(parseInt(Math.random() * a.length), 1)[0];

以上是关于从数组中随机选择项目,仅在之前未使用过的情况下使用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅从数据库中选择之前未见过的值[关闭]

如何在没有任何循环php的情况下从数组中随机获取项目

如何确保从数组中随机选择的下一个值与使用 Javascript 的当前值不同? [复制]

如何从 Julia 的加权数组中选择一个随机项?

如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)

仅在发布模式下使用 glGenBuffer 的未处理异常 - QT