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

ES9 下如何优雅实现根据订单数组更新承运人对象数组的属性值

ES9 优化实现方案

首先通过reduce一次性统计所有订单的承运商维度数据,再遍历承运人数组赋值,时间复杂度为O(n+m),远优于嵌套循环的O(n*m),同时用到ES9正式支持的对象扩展运算符简化写法:

// 第一步:统计所有订单的承运商维度数据
const orderStats = orders.reduce((result, curOrder) => {
  const code = curOrder.carrier_code
  // 不存在对应承运商统计项则初始化
  if (!result[code]) {
    result[code] = { items: 0, printable: 0 }
  }
  result[code].items++
  result[code].printable += curOrder.printable
  return result
}, {})

// 第二步:更新carrier数组,如果不想修改原数组可以用map返回新数组
const updatedCarrier = carrier.map(item => ({
  ...item, // ES9 对象扩展运算符
  ...(orderStats[item.carrier_code] || { items: 0, printable: 0 })
}))

// 如果需要原地修改原carrier数组,用下面的写法即可
// carrier.forEach(item => Object.assign(item, orderStats[item.carrier_code] || { items: 0, printable: 0 }))

打印updatedCarrier即可得到你预期的结果。

方案优势

  • 性能更优:仅需遍历两次数组,数据量越大相比嵌套循环的性能优势越明显
  • 逻辑清晰:统计和赋值逻辑拆分,后续维护调整更简单
  • 代码简洁:利用数组方法和ES9特性,没有冗余的嵌套判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:06:06