如果 else 没有按预期工作,我的逻辑有问题吗?

If else not working as intended, is there something wrong with my logic?

我正在尝试遍历一个数组,如果有任何匹配的元素,它应该将 true 推送到一个新数组,否则 return 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 应该 return

[false, false, true, false, false]

然而,它是returning

[false, false, false, false, false]

也许有什么我没有看到?

您必须首先按照与 wordsReviewed 相同的方式拆分 wordsIncorrect 字符串,这样它就可以与项目进行比较,并且不包括末尾有匹配 " 之类的字符串猫”与“牛”

这是固定的例子

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);

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

输出:

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

您也忘记了将 incorrectWords 字符串拆分为一个数组。现在,您正在检查字符串是否包含单词而不是数组。因此,String.includes 对整个字符串而不是单个元素执行模式匹配。由于每个不正确的单词都包含 cat 模式,因此它会认为包含 cat 并且 return 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);