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

JavaScript如何对数组内相同产品的中间索引数量值累加合并

问题原因

你原来的代码存在两个核心问题:

  • 初始测试用的购物车字符串格式错误:'219_1_undefined|244|1_undefined|248_1_20///179+25///153|221_1_undefined' 里244和1_undefined之间错误用了|分割,应该是下划线_,导致拆分后出现244、1_undefined两个无效的单独项
  • 逻辑错误:直接过滤掉同产品ID的旧项直接新增,没有做数量累加,只是把旧的删了加新的1件,无法实现叠加效果
  • 额外注意:判断是否为同一款商品时,除了产品ID一致,还要保证product_options参数一致,避免把同产品不同规格的商品错误合并

修复后代码

let pid = 219;
let addQty = 1; // 要新增的商品数量
let params = "undefined";

// 修正初始购物车字符串的格式错误
let cartStr = '219_1_undefined|244_1_undefined|248_1_20///179+25///153|221_6_undefined';
let cartItems = cartStr.split('|');
let isExisted = false;

// 遍历现有购物车找匹配项累加数量
let updatedItems = cartItems.map(item => {
  const [itemPid, itemQty, itemParams] = item.split('_');
  // 产品id和规格参数都一致才是同一款商品,执行累加
  if (Number(itemPid) === pid && itemParams === params) {
    isExisted = true;
    return `${itemPid}_${Number(itemQty) + addQty}_${itemParams}`;
  }
  return item;
})

// 购物车无同款则新增商品
if (!isExisted) {
  updatedItems.push(`${pid}_${addQty}_${params}`);
}

// 输出结果:updatedItems就是你需要的合并后数组
console.log(updatedItems);
// 如果需要存回localStorage,拼接为字符串即可
const newCartStr = updatedItems.join('|');
console.log(newCartStr);

运行结果

输出的数组为:
['219_2_undefined', '244_1_undefined', '248_1_20///179+25///153', '221_6_undefined'],和预期效果一致,如果需要调整排序可以自行补充排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:02