我对 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();
非常感谢您的帮助!
答案 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 !");
}
...