为什么“.includes”不适用于我的二维数组?

拉尔

简介:
对于学校,我必须制作一个项目,在其中检查“测试”的答案以及它们是否正确。我们必须使用二维数组和“.includes”函数来做到这一点。

必需的:

  • 必须包含一个“.includes”

我试过的:

  • 在 if 语句的两个数组中删除和添加“i”
  • Console.log-ing 测试以确保它不是阵列故障
  • 谷歌搜索澳大利亚并返回

好吧,我收到了一些很棒的答案,但是我不明白他们在做什么(即使在研究和谷歌搜索之后)。我已经修改了我的代码,使其更短且更易于阅读。我仍然需要帮助。

我得到的:
在此处输入图片说明

代码:

  • HTML:

    <html>
        <head>
            <title>a test</title>
            <script src="script.js" defer></script>
        </head>
        <body>
            <h1>Answer the questions</h1>
            <div>
                <h3>What is the capital of France?</h3>
                <input type="text" name="capFrance" 
     id="capFrance">
                <br>
                <h3>How many legs does a spider have?</h3>
                <input type="number" name="legSpider" id="legSpider">
                <br>
                <h3>What is the biggest lake in the Netherlands?</h3>
                <input type="text" name="lakeNL" id="lakeNL">
                <br>
                <h3>What is a german Car brand?</h3>
                <input type="text" name="gerBrand" id="gerBrand">
                <br>
                <h3>Name an island</h3>
                <input type="text" name="island" id="island">
                <br><br>
                <button onclick="answerChecker()">Check answers! 
    </button>
            </div>
        </body>
    </html>
    
  • JavaScript:

    function answerChecker() {
    var answersInput = document.querySelectorAll("input");
    var rightAnswers = 
        [
            ["Parijs"],
            ["8]", 
            ["Ijselmeer"],
            ["Volkswagen", "Audi", "Opel", "Porsche", "BMW", "Mercedes", 
    "Mercedes-Benz"],
            ["Texel", "Vlieland", "Terschelling", "Ameland", 
    "Schiermonnikoog"],
        ];
    
    var i;
    for (i = 0; i < rightAnswers.length; i++) {
        if (rightAnswers[i].includes(answersInput[i].value) == 
    true) {
            answersInput[i].style.backgroundColor = "green";
        } else {
            answersInput[i].style.backgroundColor = "red";
        }
    }
    }
    

编辑:我已经将所有内容翻译成英文,我已经交换了一些代码以获得更有效和干净的阅读,并且我已经删除了“旧”代码。

A1r双关语

有变化的工作片段:

  • ["8]", -> ["8"],
  • var i -> let i
  • 忽略 == true

function answerChecker() {
  var answersInput = document.querySelectorAll("input");
  var rightAnswers = [
    ["Parijs"],
    ["8"],
    ["Ijselmeer"],
    ["Volkswagen", "Audi", "Opel", "Porsche", "BMW", "Mercedes",
      "Mercedes-Benz"
    ],
    ["Texel", "Vlieland", "Terschelling", "Ameland",
      "Schiermonnikoog"
    ],
  ];

  for (let i = 0; i < rightAnswers.length; i++) {
    if (rightAnswers[i].includes(answersInput[i].value)) {
      answersInput[i].style.backgroundColor = "green";
    } else {
      answersInput[i].style.backgroundColor = "red";
    }
  }
}
<html>

<head>
  <title>a test</title>
  <script src="script.js" defer></script>
</head>

<body>
  <h1>Answer the questions</h1>
  <div>
    <h3>What is the capital of France?</h3>
    <input type="text" name="capFrance" id="capFrance">
    <br>
    <h3>How many legs does a spider have?</h3>
    <input type="number" name="legSpider" id="legSpider">
    <br>
    <h3>What is the biggest lake in the Netherlands?</h3>
    <input type="text" name="lakeNL" id="lakeNL">
    <br>
    <h3>What is a german Car brand?</h3>
    <input type="text" name="gerBrand" id="gerBrand">
    <br>
    <h3>Name an island</h3>
    <input type="text" name="island" id="island">
    <br><br>
    <button onclick="answerChecker()">Check answers! 
</button>
  </div>
</body>

</html>

旧答案

最初的问题是您对rightAnswers数组中的不同数据类型不做任何处理这可以通过多种方式修复,但假设您无法编辑rightAnswers结构。

那么让我们来分析一下你在这里做什么:

for (i = 0; i < yourAnswers.length; i++) {
    if (yourAnswers[i].includes(rightAnswers[i]) == true) {
        answersInput[i].style.backgroundColor = "green";
    } else {
        answersInput[i].style.backgroundColor = "red";
    }
}

您检查用户给出的答案是否与预期答案完全相同(区分大小写)。答案并不总是一段文本,因为其中还有数组,因此您的代码在 5 种情况中的 2 种情况下失败。

让我们添加这种类型的签入:

for (let i = 0; i < yourAnswers.length; i++) {
    const isRightAnswer = typeof rightAnswers[i] === 'string'
        ? yourAnswers[i].includes(rightAnswers[i])
        : rightAnswers[i].includes(yourAnswers[i]);
    answersInput[i].style.backgroundColor = isRightAnswer ? "green" : "red";
}

这将处理rightAnswers数组中的两种类型

更多说明

我们来看看你使用的数据结构:

var rightAnswers = [
  "Parijs",
  '8',
  "Ijselmeer",
  ["Volkswagen", "Audi", "Opel", "Porsche", "BMW", "Mercedes", "Mercedes-Benz"],
  ["Texel", "Vlieland", "Terschelling", "Ameland", "Schiermonnikoog"],
];

您有 3 个类型的String值和 2 个类型的Array因此,当您像这样访问它们时,您会rightAnswers[i]根据类型运行不同的代码。所以这就是我出示typeof支票的原因。

这是 的String变体includes()

yourAnswers[i].includes(rightAnswers[i])

这是的Array变种includes()

rightAnswers[i].includes(yourAnswers[i])

你称之为 atwo dimensional array但一个 truetwo dimensional array是一个只有数组作为孩子的数组。@CarstenMassmann 将您的数组转换为真正的数组,因为处理将变得更加简单,因为您只需担心一种类型。

?:是一个三元运算符,基本上是一个速记if then else

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么PyCharm的自动完成功能不适用于我安装的库?

为什么Xcode的错误检查不适用于我的测试文件夹?

为什么我的二维数组不旋转?

为什么数据绑定不适用于我的自定义属性指令

为什么路线要求适用于我的第一条路线而不适用于我的第二条路线?

为什么网络策略入口不适用于我的情况

为什么输出缓存不适用于我的ASP.NET MVC 4应用程序?

为什么我的CSS样式表不适用于我的HTML文档?

为什么顶部填充不适用于我的锚点?

为什么 uglify 不适用于我在 gulp 中的 javascript 文件

为什么“this”关键字不适用于我下面代码中的类中的静态方法?

Numpy:编写适用于一维和二维数组的函数的好方法是什么

为什么除了高度和宽度之外的任何 CSS 都不适用于我的 div?

为什么我的 CSS 不适用于我的所有 EJS 循环?

为什么我的函数适用于矩阵但为什么不适用于向量?

为什么 Addon XLSX 不适用于我系统中的以下代码?

为什么 Leaflet.LayerGroup.Collision 不适用于我的 L.GeoJSON?

为什么我的 SQL 查询不适用于我的 where not equal 条件?

为什么 GridView 过滤器不适用于我?

为什么 node.js 不适用于我的任何应用程序?ELIFECYCLE 错误

为什么我的样式不适用于我的子组件?

Formatter black 不适用于我的 VSCode ......但为什么呢?

我的替换函数适用于数组,但不适用于也是数组的 HTML 集合。为什么?

为什么反应“关键”道具不适用于我的以下情况?

为什么 Keras model.summary() 不适用于我的模型?

为什么我的 Timber/Twig 中的运算符不适用于我的条件语句?

为什么我的代码不适用于我的 VS Code 和代码块?

为什么我的 JSON 不适用于我的 sublime 文本设置?

为什么 CORS 不适用于我的 express/react 应用程序?