【问题标题】:Select one multiple answers from array in another array从另一个数组中的数组中选择一个多个答案
【发布时间】:2021-04-27 16:35:17
【问题描述】:

我对 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();

非常感谢您的帮助!

【问题讨论】:

    标签: javascript arrays for-loop


    【解决方案1】:

    我建议使用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 !");
    }
    ...
    

    【讨论】:

    • 像魅力一样工作,感谢您的快速周转。专注于我的“for”循环,而我没有意识到它在我的起始函数中,因此不需要包含它。
    【解决方案2】:

    如果答案是数组,您可以使用Array.some 来检查多个正确答案。 sn-p 在控制台中显示正确的响应(更正为“鸭子”和“鸭子”),但您的 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();

    【讨论】:

    • 完美运行,对.some(res=&gt;res==answer) 仍然不是很熟悉,但我猜它会随着时间的推移而出现。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2020-02-13
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多