【问题标题】:If else not working as intended, is there something wrong with my logic?如果没有按预期工作,我的逻辑有问题吗?
【发布时间】:2022-01-07 16:18:25
【问题描述】:

我正在尝试遍历一个数组,如果有任何匹配的元素,它应该将 true 推送到一个新数组,否则返回 false。

const wordPerformance = []
const wordsReviewed   = "candy, cattle, cat, call, cheat";
const wordsIncorrect  = "candy, cattle, call, cheat";

wordsReviewed.split(/,\s?/).forEach((word) => {
  if (wordsIncorrect.includes(word)) {
    wordPerformance.push(false);
  } else {
    console.log(word) //unreachable, though 'cat' should be logged
    wordPerformance.push(true);
  }
});

console.log(wordPerformance);

按照这个逻辑,wordPerformance 应该返回

[false, false, true, false, false]

但是,它正在返回

[false, false, false, false, false]

也许有些东西我没看到?

【问题讨论】:

  • "cat" 包含在 "cattle" 中。您没有测试绝对单词匹配,只是存在子字符串

标签: javascript arrays loops if-statement foreach


【解决方案1】:

您必须首先拆分 wordsIncorrect 字符串,就像使用 wordsReviewed 一样,所以它会与项目进行比较,并且不包括末尾有某些内容的字符串,例如将“cat”与“cattle”匹配

这是固定示例

const wordPerformance = []
const wordsReviewed = "candy, cattle, cat, call, cheat";
const wordsIncorrect = "candy, cattle, call, cheat";
const wordsIncorrectSplitted = wordsIncorrect.split(/,\s?/);

wordsReviewed.split(/,\s?/).forEach((word) => {
  if (wordsIncorrectSplitted.includes(word)) {
    wordPerformance.push(false);
    } else {
    console.log(word) //unreachable, though 'cat' should be logged
    wordPerformance.push(true);
  }
});

console.log(wordPerformance);

【讨论】:

  • 还有String.prototype.includes()
  • 嗯,我认为你是对的。然后,该错误将与整个字符串进行比较,因为它包括末尾有其他内容的字符串。我正在修正答案。
  • @charlietfl 是的,这就是代码没有抛出错误的原因,它将 .includes() 用于字符串而不是数组
【解决方案2】:

您还需要拆分wordsIncorrectif (wordsIncorrect.split(",").includes(word))

输出:

cat
[ false, false, true, false, false ]

【讨论】:

    【解决方案3】:

    您也忘记将不正确的单词字符串拆分为数组。现在,您正在检查字符串是否包含单词而不是数组。因此,String.includes 在整个字符串而不是单个元素上执行模式匹配。由于每个不正确的单词都包含cat 模式,它会认为 cat 被包含并返回 false:

    const wordPerformance = []
    const wordsReviewed   = "candy, cattle, cat, call, cheat";
    const wordsIncorrect  = "candy, cattle, call, cheat";
    
    wordsReviewed.split(/,\s?/).forEach((word) => {
      if (wordsIncorrect.split(/,\s?/).includes(word)) { //split incorrectWords
        wordPerformance.push(false);
       } else {
         console.log(word) //unreachable, though 'cat' should be logged
         wordPerformance.push(true);
       }
     });
    
    console.log(wordPerformance);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2015-08-02
      • 2012-04-12
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多