You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:03