javascript - 检查数组元素是否存在,如果不存在,则使用 JavaScript 跳到下一个

标签 javascript arrays

我试图从一组答案中获取 3 个随机答案并将它们存储到一个新数组中。 因此,selectedAnswers 的新数组几乎会从答案池中获得 3 个随机答案,再加上正确的答案。我想我明白了,但唯一的问题是,如果已经使用了数组元素,我不知道如何让它跳过,并添加一个不同的元素。所以我最终在新数组中出现了重复项。

请参阅此处的代码。

http://jsfiddle.net/oybojgzm/2/

var answerList = ["answer 1", "answer 2", "answer 3", "answer 4", "answer 5"];
var correctAnswer = "CORRECT!";
var selectedAnswers = [correctAnswer];
var randomNumber = 0;

function randomAnswer() {
    if (selectedAnswers.length < 4) {
        randomNumber = Math.floor((Math.random() * answerList.length) +
            1) - 1;

        for (i = 0; i < answerList.length; i++) {
            if (answerList[randomNumber] === answerList[i]) {
                randomNumber = Math.floor((Math.random() * answerList.length) +
            1) - 1;

                randomAnswer();

            } else {
                selectedAnswers.push(answerList[i]);
                console.log(selectedAnswers);
                randomNumber = Math.floor((Math.random() * answerList.length) +
            1) - 1;
                randomAnswer();
                break;
            }
        }
    }
}




randomAnswer();

最佳答案

我建议使用随机播放函数,而不是多次从数组中选择随机索引。

注意。这假设 maximumAnswers值将始终是 <=answerList.length + 1

var answerList = ["answer 1", "answer 2", "answer 3", "answer 4", "answer 5"];
var correctAnswer = "CORRECT!";
var selectedAnswers = [];
var maximumAnswers = 4;

function generateAnswers() {
    var tempAnswerList = shuffle(answerList); // lets create a clone of the answerList so we dont effect the original, and shuffle it
    tempAnswerList = tempAnswerList.slice(0, maximumAnswers - 1); // - 1 cos we will be adding the correct answer
    tempAnswerList.push(correctAnswer); // add correct answer to the 
    tempAnswerList = shuffle(tempAnswerList); // shuffle again so our correct answer isnt always last
    console.log(tempAnswerList);
}


// from http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

generateAnswers();

<强> JSFIDDLE DEMO

关于javascript - 检查数组元素是否存在,如果不存在,则使用 JavaScript 跳到下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601727/

相关文章:

JavaScript 页面重定向

javascript - 为什么 array.push 有时比 array[n] = value 快?

arrays - 为什么我的数组没有增长?

javascript - 与数组变量绑定(bind)时,IonSelect 和 ionCheckBox 不起作用

php - 如何获取带有数组值的变量

javascript - 如何全局配置 Moment 以始终​​将日期格式化为 "DD MM"

javascript - 声明的函数被 IE 11 视为未定义

Java ImageIcon 到 JLabel 数组

javascript - jquery mobile 无法获取正确的 url

javascript - 头部 Origin (websocket) 中的数据可以伪造吗?