Javascript 正在更新字符串的数组比较函数
我正在为一个问答游戏使用预先编写的代码,我必须将游戏中的问题选项从数值更新为字符串。但是,我不知道应该在代码中更改什么,以便用户选择与正确答案进行比较。目前,对于数字答案,代码会将正确选项在选项数组中的数组位置与correctAnswer变量进行比较。我最好的猜测是,更改必须发生在底部显示的displayScore函数中 当前问题对象:Javascript 正在更新字符串的数组比较函数,javascript,jquery,arrays,compare,Javascript,Jquery,Arrays,Compare,我正在为一个问答游戏使用预先编写的代码,我必须将游戏中的问题选项从数值更新为字符串。但是,我不知道应该在代码中更改什么,以便用户选择与正确答案进行比较。目前,对于数字答案,代码会将正确选项在选项数组中的数组位置与correctAnswer变量进行比较。我最好的猜测是,更改必须发生在底部显示的displayScore函数中 当前问题对象: { question: "What is 2*5?", choices: [2, 5, 10,
{
question: "What is 2*5?",
choices: [2, 5, 10, 15, 20],
correctAnswer: 2
}
更新后的问题对象将是:
{
question: "Which list contains words that are NOT names of shoe types:"
choices:[ "A. Oxford, jelly, boat, clogs, stiletto, mary jane",
"B. Loafer, gladiator, wedge, mule, platform",
"C. Pump, moccasin, wingtip, sneaker, derby, monk",
"D. Chalupa, dogler, hamster, croonley, frankfurt"],
correctAnswer : "D. Chalupa, dogler, hamster, croonley, frankfurt"
}
目前,用于计算正确答案的代码部分包括:
//Array containing user choices
var selections = [];
// Reads the user selection and pushes the value to an array
function choose() {
selections[questionCounter] = +$('input[name="answer"]:checked').val();
}
// Computes score and returns a paragraph element to be displayed
function displayScore() {
var score = $('<p>',{id: 'question'});
var numCorrect = 0;
for (var i = 0; i < selections.length; i++) {
if (selections[i] === questions[i].correctAnswer) {
numCorrect++;
}
}
}
//包含用户选择的数组
var选择=[];
//读取用户选择并将值推送到数组
函数选择(){
选择[questionCounter]=+$('input[name=“answer”]:选中')。val();
}
//计算分数并返回要显示的段落元素
函数displayScore(){
变量得分=$(“”,{id:'问题'});
var numCorrect=0;
对于(变量i=0;i
学分:
如注释中所述,问题在于+
前面的$().val()
。因为它既没有得到任何支持也没有得到任何解释,我想我应该详细说明一下:
虫子
从输入检索值时,该值始终为字符串
。初始示例中的正确答案是一个数字
。因为您使用==
进行比较,所以两者不相等:2===“2”
返回false
添加+
运算符是将值“转换”为数字的一种简单方法。(点评:)很多人不喜欢它,因为对于初学者来说,它很容易错过,也很难解释。一种可能更清晰的方法是编写Number(x)
或使用parseInt
或parseFloat
问题是,一旦所需的值是字符串
,则+
运算符将尝试从类似非数字的字符串中生成数字。结果将被很好地命名为NaN
,它表示非数字,可以使用isNaN
即:
作品:
中断:
const required = "Hello world";
const input = "Hello world";
required === +input; // "Hello world" === NaN -> false
如何修复它
结论:删除+
将修复基于字符串的答案,但会破坏基于数字的答案
我的建议是删除+
,但要确保答案数组包含字符串。(例如,使用[2,3,4]进行映射。映射(字符串)
或toString
)
其他可能的修复方法包括:
- 使用
操作员在==
内将用户输入与所需值进行比较(不推荐)displayScore
- 为数组值的类型添加一个
语句,以便为开关
、数字
以及其他值选择自定义比较方法字符串
- 按照用户的建议,在数组中使用
,而不是值(可能会使索引
对象更难阅读)问题
var val=$(“输入”).val();
console.log(“typeof val->”,typeof val);
console.log(“typeof 2->”,typeof 2);
log(“val==2->”,val==2);
log(“val==2->”,val==2);
log(“+val==2->”,+val==2);
console.log(“编号('2')==2->”,编号(val)==2);
var nonNumericString=“Hello world”;
log(“+'Hello world'->”,+nonNumericString);
var answers=[2,3,4];
log(“[2,3,4]->”中的“2”,answers.includes(val));
log(“[2,3,4].map(String)->”中的“2”,answers.map(String).includes(val))代码>
学分:
如注释中所述,问题在于+
前面的$().val()
。因为它既没有得到任何支持也没有得到任何解释,我想我应该详细说明一下:
虫子
从输入检索值时,该值始终为字符串
。初始示例中的正确答案是一个数字
。因为您使用==
进行比较,所以两者不相等:2===“2”
返回false
添加+
运算符是将值“转换”为数字的一种简单方法。(点评:)很多人不喜欢它,因为对于初学者来说,它很容易错过,也很难解释。一种可能更清晰的方法是编写Number(x)
或使用parseInt
或parseFloat
问题是,一旦所需的值是字符串
,则+
运算符将尝试从类似非数字的字符串中生成数字。结果将被很好地命名为NaN
,它表示非数字,可以使用isNaN
即:
作品:
中断:
const required = "Hello world";
const input = "Hello world";
required === +input; // "Hello world" === NaN -> false
如何修复它
结论:删除+
将修复基于字符串的答案,但会破坏基于数字的答案
我的建议是删除+
,但要确保答案数组包含字符串。(例如,使用[2,3,4]进行映射。映射(字符串)
或toString
)
其他可能的修复方法包括:
- 使用
==
操作员在displayScore
内将用户输入与所需值进行比较(不推荐)
- 为数组值的类型添加一个
开关
语句,以便为数字
、字符串
以及其他值选择自定义比较方法
- 按照用户的建议,在数组中使用
索引
,而不是值(可能会使问题
对象更难阅读)
例子
<