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

如何匹配数组中ID+颜色符合条件的对象并递增其count属性

localStorage购物车精准匹配SKU的数量递增实现

你写的双重if判断ID+颜色的匹配逻辑本身是成立的,当前代码存在几个遗漏点会导致逻辑不符合预期:

  • 匹配到目标商品后没有终止循环,会继续遍历后续条目,既浪费性能,万一数组里存在同ID同色的重复脏数据还会重复累加数量
  • 数量修改完成后没有把更新后的购物车数组重新写入localStorage,页面刷新后修改会丢失
  • 缺少未匹配到商品的分支逻辑,这种场景下需要把新商品追加到购物车列表
  • parseInt没传基数参数,在特殊值场景下可能出现进制解析错误

修正后的完整实现代码如下:

// 从localStorage读取现有购物车数据,无数据时初始化为空数组
const products = JSON.parse(localStorage.getItem('cart')) || [];
// newAdd 为待加入购物车的新商品对象
let product_exists = false;

for (let loggedProduct of products) {
  // 联合判断ID、颜色两个SKU维度,完全匹配才执行数量累加
  if (loggedProduct.id === newAdd.id && loggedProduct.color === newAdd.color) {
    product_exists = true;
    // 转数值时指定10进制,累加后直接赋值
    loggedProduct.count = parseInt(loggedProduct.count, 10) + 1;
    // 命中目标后直接终止循环,避免无意义遍历
    break;
  }
}

// 遍历完成后未找到匹配商品,追加新条目到购物车
if (!product_exists) {
  products.push({
    ...newAdd,
    count: 1
  });
}

// 将更新后的购物车数据序列化后写回localStorage
localStorage.setItem('cart', JSON.stringify(products));

上述逻辑中,数量递增操作只会在商品ID、颜色两个条件同时满足时触发,不会影响同ID不同颜色、或者不同ID的其他商品条目。

额外优化建议:

  • 从localStorage读取购物车数据做初始化时,就把所有count字段统一转为数值类型,后续操作不需要每次做类型转换,减少类型异常
  • 如果后续商品新增其他SKU维度(比如尺寸、规格),只需要在if判断中补充对应字段的相等判断即可,逻辑完全通用
  • 尽量保证购物车数组里不会出现同ID+同SKU属性的重复条目,从数据源头避免累加异常

内容的提问来源于stack exchange,提问作者Alice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:36:21