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

JavaScript中两个对象数组的库存扣减计算实现需求

解决对象数组的库存扣减计算需求

这是个挺常见的数组对象匹配计算场景,我来分享个高效的实现方式:

核心思路

  1. 先做映射优化:把orders数组转换成以_id为键、qty为值的对象,这样后续查找对应订单数量的速度会快很多(O(1)时间复杂度)。
  2. 遍历处理库存:逐个遍历stocks数组里的元素,检查映射对象中是否存在对应_id的订单数量,有就用原库存减去该数量,没有就保持原库存不变。

代码实现(JavaScript)

const orders = [ 
  { "_id": "5e64cfb59726d72129e78aee", "qty": 10 }, 
  { "_id": "5e64d0fe9978d443af7db86c", "qty": 14 } 
];

const stocks = [ 
  { "_id": "5e64d0fe9978d443af7db86c", "qty": 600 }, 
  { "_id": "5e64cfb59726d72129e78aee", "qty": 60 }, 
  { "_id": "5e64cfb59726d72129e78ab5", "qty": 650 } 
];

// 将orders转为键值对映射,快速查找订单数量
const orderQtyMap = orders.reduce((acc, order) => {
  acc[order._id] = order.qty;
  return acc;
}, {});

// 处理库存数组,生成结果
const updatedStocks = stocks.map(stock => ({
  ...stock, // 保留原对象的所有属性
  qty: stock.qty - (orderQtyMap[stock._id] || 0) // 有对应订单则扣减,否则不变
}));

console.log(updatedStocks);

输出结果

运行上面的代码后,你会得到期望的结果:

[ 
  { "_id": "5e64cfb59726d72129e78aee", "qty": 50 }, 
  { "_id": "5e64d0fe9978d443af7db86c", "qty": 586 }, 
  { "_id": "5e64cfb59726d72129e78ab5", "qty": 650 } 
]

小提示

这种实现方式的时间复杂度是O(n + m)(n是orders的长度,m是stocks的长度),比嵌套循环的O(n*m)高效得多,当数组元素较多时优势会很明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:07:47