如何使用数组方法实现用户购物车商品数量扣减店铺库存?
解决嵌套数组访问与库存更新问题
首先先修正你代码里的两处语法错误,否则无法正常运行:
user.fullName键值对末尾缺少逗号- 第二个购物车项的
subtTotal拼写错误,应为subTotal
核心思路
要实现库存更新,需要:
- 遍历用户购物车的每一项
- 从购物车项中提取产品名称和购买数量
- 在库存数组中匹配对应产品,计算库存与购买数量的差值并更新
实现代码
// 修正语法错误后的基础数据 let user = { fullName: "Guest User", cart: [ { subTotal: 300, product: [ { productName: "apple", quantity: 3 } ] }, { subTotal: 1000, product: [ { productName: "orange", quantity: 5 } ] } ] }; let store = [ { name: 'apple', stocks: 10 }, { name: 'orange', stocks: 10 } ]; // 执行库存更新逻辑 user.cart.forEach(cartItem => { // 提取当前购物车项中的产品(示例中每个cartItem仅含一个产品,取索引0) const targetProduct = cartItem.product[0]; // 在store中匹配对应名称的产品 const matchedStoreItem = store.find(item => item.name === targetProduct.productName); // 找到匹配项后更新库存,可添加防负库存逻辑 if (matchedStoreItem) { matchedStoreItem.stocks -= targetProduct.quantity; // 若要防止库存为负数,可替换为: // matchedStoreItem.stocks = Math.max(matchedStoreItem.stocks - targetProduct.quantity, 0); } }); console.log(store); // 输出结果: // [ { name: 'apple', stocks: 7 }, { name: 'orange', stocks: 5 } ]
用到的数组方法说明
forEach:遍历购物车数组,对每个购物车项执行更新逻辑,适合无需返回值的遍历操作find:在库存数组中查找第一个匹配产品名称的元素,精准定位需要更新的库存项
扩展场景:购物车项含多个产品
如果你的购物车项中可能包含多个产品(即 cartItem.product 数组有多个元素),只需在遍历中嵌套一层 forEach:
user.cart.forEach(cartItem => { cartItem.product.forEach(product => { const matchedStoreItem = store.find(item => item.name === product.productName); if (matchedStoreItem) { matchedStoreItem.stocks -= product.quantity; } }); });
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

