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

如何根据warehouse和deliveryWeek合并boxSize数组对象

解决方案

你的代码问题在于两点:一是只以deliveryWeek作为分组键,忽略了warehouse(如果不同仓库有同一配送周,会被错误合并);二是用Object.assign直接覆盖对象,导致后遍历的对象会替换掉之前的,没法合并两种箱子的字段。

要实现按warehouse和deliveryWeek合并对象,并拆分small/large的字段,可以这么做:

const boxSize = [ 
{ 
  warehouse: 'NYC',
  deliveryWeek: '2022-11-07',
  boxSize: 'small',
  total: 5
}, 
{
  warehouse: 'NYC',
  deliveryWeek: '2022-11-07',
  boxSize: 'large',
  total: 9
},
// 测试用例:不同仓库同配送周的情况
{
  warehouse: 'LA',
  deliveryWeek: '2022-11-07',
  boxSize: 'small',
  total: 3
}
];

const mergedMap = {};

boxSize.forEach(item => {
  // 用仓库+配送周作为唯一标识键,确保只有同仓库同周的对象才会合并
  const key = `${item.warehouse}-${item.deliveryWeek}`;
  
  if (!mergedMap[key]) {
    // 初始化合并后的对象,保留基础的仓库和配送周信息
    mergedMap[key] = {
      warehouse: item.warehouse,
      deliveryWeek: item.deliveryWeek
    };
  }
  
  // 根据箱子类型,添加对应的字段
  if (item.boxSize === 'small') {
    mergedMap[key].boxSizeSmall = item.boxSize;
    mergedMap[key].smallTotal = item.total;
  } else if (item.boxSize === 'large') {
    mergedMap[key].boxSizeLarge = item.boxSize;
    mergedMap[key].largeTotal = item.total;
  }
});

// 将映射对象的值转为数组,得到最终结果
const result = Object.values(mergedMap);
console.log(result);

逻辑说明:

  1. 分组键设计:用warehouse和deliveryWeek的组合字符串作为键,避免不同仓库同周的对象被错误合并。
  2. 对象初始化:遇到新的分组键时,先创建包含基础信息的空对象。
  3. 字段拆分:根据当前元素的boxSize,给合并对象添加对应的small或large相关字段,不会覆盖已有内容。

运行后输出结果如下:

[
  {
    warehouse: 'NYC',
    deliveryWeek: '2022-11-07',
    boxSizeSmall: 'small',
    smallTotal: 5,
    boxSizeLarge: 'large',
    largeTotal: 9
  },
  {
    warehouse: 'LA',
    deliveryWeek: '2022-11-07',
    boxSizeSmall: 'small',
    smallTotal: 3
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:55:20