JavaScript如何判断二维数组中是否存在指定项并设置对应布尔变量
代码问题修复与优化指导
原有代码存在的问题
- 比较逻辑错误:if判断中误用赋值运算符
=代替相等判断运算符,且未正确取数组中的商品名对比:prices数组的每个子项是[商品名称, 价格]的结构,要判断传入的商品名是否存在,应该对比item和prices[i][0],而不是整个prices[i]数组。 - 赋值逻辑错误:
isValidItem != true是比较运算,不会修改isValidItem的值,应该使用赋值运算符=;同时循环内的判断逻辑完全写反,且每次循环都会覆盖isValidItem的取值,即使前面匹配到了正确商品,后续不匹配的项也会把值改回错误结果。 - 变量声明缺失:循环变量
i未加let声明,会隐式成为全局变量,污染全局作用域。 - 无返回值:函数计算完
isValidItem后没有返回,外部调用函数无法拿到判断结果。
修复后的基础可用代码
function addItemToCart(item) { let isValidItem = false; // 声明循环变量i for(let i=0; i<prices.length; i++){ // 正确对比商品名,匹配到就设为true并终止循环 if(item === prices[i][0]){ isValidItem = true; break; // 匹配到后无需继续循环 } } // 返回判断结果 return isValidItem; }
优化建议
- 用数组内置方法简化代码:可以直接使用
Array.some()方法实现匹配判断,无需手动写循环,代码更简洁:
function addItemToCart(item) { return prices.some(priceItem => priceItem[0] === item); }
- 高频查询场景优化:如果需要频繁判断商品是否存在,可以提前把
prices数组转成Map结构,查找时间复杂度从O(n)降到O(1),性能更好:
// 提前初始化商品Map const priceMap = new Map(prices); function addItemToCart(item) { return priceMap.has(item); } // 如果同时需要拿商品价格,直接用priceMap.get(item)即可,不需要再次遍历数组
内容的提问来源于stack exchange,提问作者Cornell
相关产品推荐
相关产品推荐

