Javascript 正在更新字符串的数组比较函数

Javascript 正在更新字符串的数组比较函数,javascript,jquery,arrays,compare,Javascript,Jquery,Arrays,Compare,我正在为一个问答游戏使用预先编写的代码,我必须将游戏中的问题选项从数值更新为字符串。但是,我不知道应该在代码中更改什么,以便用户选择与正确答案进行比较。目前,对于数字答案,代码会将正确选项在选项数组中的数组位置与correctAnswer变量进行比较。我最好的猜测是,更改必须发生在底部显示的displayScore函数中 当前问题对象: { question: "What is 2*5?", choices: [2, 5, 10,

我正在为一个问答游戏使用预先编写的代码,我必须将游戏中的问题选项从数值更新为字符串。但是,我不知道应该在代码中更改什么,以便用户选择与正确答案进行比较。目前,对于数字答案,代码会将正确选项在选项数组中的数组位置与correctAnswer变量进行比较。我最好的猜测是,更改必须发生在底部显示的displayScore函数中

当前问题对象:

        {
            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
    内将用户输入与所需值进行比较(不推荐)
  • 为数组值的类型添加一个
    开关
    语句,以便为
    数字
    字符串
    以及其他值选择自定义比较方法
  • 按照用户的建议,在数组中使用
    索引
    ,而不是值(可能会使
    问题
    对象更难阅读)
例子 <