如果 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);
您还需要拆分 wordsIncorrect
。 if (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);
我正在尝试遍历一个数组,如果有任何匹配的元素,它应该将 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);
您还需要拆分 wordsIncorrect
。 if (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);