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

如何优化forEach迭代性能,实现10K商品数组与2K订单数组的匹配输出?

优化方案

你原代码性能差的核心原因是嵌套循环带来的O(n*m)时间复杂度:遍历10k条商品的每一条时,都要完整遍历2k个订单,累计执行2000万次匹配判断,叠加每次判断都要做一次Number(order.itemId)类型转换,自然耗时极高。

优化核心逻辑是把订单数组预处理为以itemId为键的哈希映射表,把匹配逻辑从嵌套循环的O(n)查找降为O(1)的哈希表查找,整体时间复杂度降到O(n+m),性能可提升上百倍,且完全保留你需要的输出结构。

实现代码

// 第一步:预处理订单,构建哈希映射表,key为数字类型的itemId,value为对应订单列表(兼容单商品对应多订单的场景)
const orderMap = new Map()

// 处理本地订单
localOrders.forEach(order => {
  const itemId = Number(order.itemId)
  if (!orderMap.has(itemId)) {
    orderMap.set(itemId, [])
  }
  orderMap.get(itemId).push({ order, type: 'local' })
})

// 处理线上订单
onlineOrders.forEach(order => {
  const itemId = Number(order.itemId)
  if (!orderMap.has(itemId)) {
    orderMap.set(itemId, [])
  }
  orderMap.get(itemId).push({ order, type: 'online' })
})

// 第二步:遍历商品匹配订单
const inventory = []
allItems.forEach(item => {
  const matchedOrders = orderMap.get(item.id)
  if (matchedOrders) {
    matchedOrders.forEach(({order, type}) => {
      inventory.push({ item, order, type })
    })
  }
})

return inventory

额外说明

  • 输出结构和你原代码完全一致,满足同时返回商品详情、订单详情、订单类型的需求
  • 提前一次性完成所有order.itemId的类型转换,不需要每次匹配重复执行,进一步压缩耗时
  • 如果你确认每个itemId只会对应一个订单,可以把映射表的value改成单个对象,去掉matchedOrders的循环,性能还能再提升

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:09