JS搜索函数如何返回匹配商品数组,无匹配时返回购物车无商品提示?
问题排查与修复方案
原代码核心问题
- 循环逻辑错误:无论匹配成功还是失败,第一次循环结束后都会触发
break终止遍历,永远只会校验数组第一个元素(tomato),后续商品根本不会被检索 - 分支逻辑冗余:
if(string === items[i].name)和else if(string != items[i].name)已经覆盖了所有判断场景,最后的else分支永远不会执行 - 结果判断逻辑缺失:没有在遍历完全部商品后判断是否有匹配结果再输出对应提示,错误地把未匹配提示放在了单次循环的分支里
修复后代码
let items = [ { name: "tomato", type: "produce", price: 0.99 }, { name: "soap", type: "cleaning", price: 0.99 }, { name: "t-shirt", type: "clothing", price: 5.99 } ] function searchItem(items, searchName) { let newArray = []; // 遍历所有商品,收集匹配项 for (let i = 0; i < items.length; i++) { if (searchName === items[i].name) { newArray.push(items[i]) } } // 遍历结束后统一判断结果 if (newArray.length === 0) { return "No items found in cart" } return newArray } // 测试用例 console.log(searchItem(items,"tomato")) // 返回tomato对象组成的数组 console.log(searchItem(items,"soap")) // 返回soap对象组成的数组 console.log(searchItem(items,"apple")) // 返回"No items found in cart"
优化说明
- 移除了循环内的
break逻辑,确保所有商品都会被遍历校验 - 把结果判断放在循环结束后执行,只有全部商品遍历完没有匹配项时才返回未找到提示
- 修正了变量命名,把语义模糊的
string改为searchName提升可读性 - 移除了永远不会执行的冗余分支,简化逻辑
内容的提问来源于stack exchange,提问作者Rosa Maiden
相关产品推荐
相关产品推荐

