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
相关产品推荐
相关产品推荐

