JavaScript检测数组元素时第二个数组首元素未被匹配问题
JavaScript数组匹配漏检问题排查
问题原因
- 核心判断逻辑存在边界遗漏:未被检测的
eating字符串首字母为e,且长度恰好为6。你编写的原有判断条件仅覆盖了两种场景:- 首字母不为
e且长度小于6 - 首字母为
e且长度大于6
长度等于6的场景完全没有命中规则,因此eating不会被推入结果数组。
- 首字母不为
- 潜在隐患:循环变量
i未用let声明,会成为全局变量,可能造成作用域污染。
解决方法
根据你的逻辑补全边界判断即可,假设你的规则是:首字母为e的字符串只要长度≥6就收录,首字母不为e的字符串只要长度≤6就收录,修正后的代码如下:
function six(sll) { let list = []; // 声明循环变量i为局部变量 for (let i = 0; i < sll.length; i++) { console.log(sll[i]); const firstChar = sll[i].slice(0, 1); const strLen = sll[i].length; // 补全等于6的边界判断 if (firstChar !== "e" && strLen <= 6) { list.push(sll[i]); } else if (strLen >= 6 && firstChar === "e") { list.push(sll[i]); } } return list; } // 第一个测试数组 let sxt = ["taco", "eggs", "excellent", "exponent", "artistic", "cat", "eat"]; console.log(six(sxt)); // 第二个测试数组 let xxx = ["eating", "proper", "key", "earth"]; console.log(six(xxx));
如果你的规则对长度等于6的场景有其他要求,只需要调整上述判断中的比较运算符即可。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

