从另一个数组中的数组中选择一个多个答案

时间:2021-04-27 16:35:17

标签: javascript arrays for-loop

我对 JS 有点陌生,在从数组中选择多个输入时遇到问题。我有 2 个数组:1 个有问题,另一个有答案 问题是,在答案一中,我想设置一个可能有多个答案的问题

let questions = [
    'How many players do play on a football field?',
    'How much is 6 x 12',
    'How many atoms are present in water?',
    'Who is Daffy Duck?'
];

let responses = [
    22,
    72,
    3,
    ['duck', 'a duck'],
];

而且我不知道如何让我的代码将最后一个问题的两个答案都选为真。

这是我当前的代码,但仅适用于第一个输入。我被告知要在 2 个“for”循环中使用 Array.inArray,但是菜鸟我不知道如何设置。


function askQuestion(IndexNumber) {
    let answer = (prompt(questions[IndexNumber]));
    let isCorrect = false;

    if (answer == (responses[IndexNumber])) {
        console.log("Correct !");
        isCorrect = true;
    } else {
        console.log("False !");
    }
    addResponseToDom(IndexNumber, isCorrect);
}

let rightAnswers = 0;
let wrongAnswers = 0;

function addResponseToDom(IndexNumber, isCorrect) {

    let node = document.createElement("LI");
    let textnode = document.createTextNode(questions[IndexNumber]);
    node.appendChild(textnode);

    if (isCorrect) {
        rightAnswers++;
        document.querySelector('#right .responses').appendChild(node);
    } else {
        wrongAnswers++;
        document.querySelector('#wrong .responses').appendChild(node);
    }
}


function playQuiz() {
    for (let IndexNumber = 0; IndexNumber < questions.length; IndexNumber++) {
        askQuestion(IndexNumber);
    }
    document.querySelector('#right h2').textContent += '(' + rightAnswers + ')';
    document.querySelector('#wrong h2').textContent += '(' + wrongAnswers + ')';
}

playQuiz();

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果答案是数组,您可以使用 Array.some 来检查多个正确答案。该代码段在控制台中显示了正确的响应(更正为“鸭子”和“鸭子”),但缺少您的 HTML,因此会产生 DOM 错误。

isCorrect = Array.isArray(responses[IndexNumber])?responses[IndexNumber].some(res=>res==answer):responses[IndexNumber]==answer;

let questions = [
    'How many players do play on a football field?',
    'How much is 6 x 12',
    'How many atoms are present in water?',
    'Who is Daffy Duck?'
];

let responses = [
    22,
    72,
    3,
    ['duck', 'a duck'],
];


function askQuestion(IndexNumber) {
console.log('here')
    let answer = (prompt(questions[IndexNumber]));
    let isCorrect = false;
    isCorrect = Array.isArray(responses[IndexNumber])?responses[IndexNumber].some(res=>res==answer):responses[IndexNumber]==answer;
    if (isCorrect) {
        console.log("Correct !");
        isCorrect = true;
    } else {
        console.log("False !");
    }
    addResponseToDom(IndexNumber, isCorrect);
}

let rightAnswers = 0;
let wrongAnswers = 0;

function addResponseToDom(IndexNumber, isCorrect) {

    let node = document.createElement("LI");
    let textnode = document.createTextNode(questions[IndexNumber]);
    node.appendChild(textnode);

    if (isCorrect) {
        rightAnswers++;
        document.querySelector('#right .responses').appendChild(node);
    } else {
        wrongAnswers++;
        document.querySelector('#wrong .responses').appendChild(node);
    }
}


function playQuiz() {
    for (let IndexNumber =questions.length-1; IndexNumber >= 0; IndexNumber--) {
        askQuestion(IndexNumber);
    }
    document.querySelector('#right h2').textContent += '(' + rightAnswers + ')';
    document.querySelector('#wrong h2').textContent += '(' + wrongAnswers + ')';
}

playQuiz();

答案 1 :(得分:0)

我建议使用 Array.isArray(...)Array.includes(...) 等内置函数检查 responses[IndexNumber] 的类型。

举个例子:

...
if (Array.isArray(responses[IndexNumber])) {
    if (responses[IndexNumber].includes(answer)) {
        console.log("Correct !");
        isCorrect = true;
    } else {
        console.log("False !");
    }
} else if (answer == (responses[IndexNumber])) {
    console.log("Correct !");
    isCorrect = true;
} else {
   console.log("False !");
}
...
相关问题