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

如何按指定条件分组对象数组并重构quantity相关属性?

数组合并与字段转换实现方案

原始数组

array = [
{
 "id":1,
 "type":"abc",
 "quantity":36,
 "code":"EDF",
 "period":"2023-04-01"
},
{
 "id":0,
 "type":"yrf",
 "quantity":40,
 "code":"SFDF",
 "period":"2023-04-02"
},
{
 "id":0,
 "type":"yrf",
 "quantity":22,
 "code":"SFDF",
  "period":"2023-04-02"
},
{
 "id":1,
 "type":"abc",
 "quantity":19,
 "code":"EDF",
 "period":"2023-04-01"
}
]

需求说明

  • 当数组元素的period、type、code三者相同时,合并这些元素
  • 若元素id为1:将quantity值存入新属性quantity_{{code}}_cy,quantity_{{code}}设为空字符串
  • 若元素id为0:将quantity值存入新属性quantity_{{code}},quantity_{{code}}_cy设为空字符串
  • 合并后的目标数组示例:
finalArray=[
{
 "id":1,
  "type":"abc",
 "quantity_EDF_cy":36,
 "code":"EDF",
  "quantity_EDF":"",
 "period":"2023-04-01"
},
{
 "id":0,
 "type":"yrf",
 "quantity_SFDF_cy":"",
  "quantity_SFDF":22,
 "code":"SFDF",
 "period":"2023-04-02"
}
]

实现代码(JavaScript)

通过分组聚合+字段映射实现,核心是用临时对象按条件分组,再统一处理字段:

function processTargetArray(arr) {
  const groupContainer = {};

  arr.forEach(item => {
    // 生成唯一分组标识,确保同条件元素归为一组
    const groupKey = `${item.period}-${item.type}-${item.code}`;
    const cyField = `quantity_${item.code}_cy`;
    const normalField = `quantity_${item.code}`;

    if (!groupContainer[groupKey]) {
      // 初始化分组基础属性
      groupContainer[groupKey] = {
        id: item.id,
        type: item.type,
        code: item.code,
        period: item.period
      };
      // 根据id初始化对应字段值
      groupContainer[groupKey][cyField] = item.id === 1 ? item.quantity : '';
      groupContainer[groupKey][normalField] = item.id === 0 ? item.quantity : '';
    } else {
      // 合并同组元素(示例取最后一个元素的quantity,需求和则改为累加)
      if (item.id === 1) {
        groupContainer[groupKey][cyField] = item.quantity;
      } else {
        groupContainer[groupKey][normalField] = item.quantity;
      }
    }
  });

  // 将分组对象转为数组,得到最终结果
  return Object.values(groupContainer);
}

// 调用示例
const finalArray = processTargetArray(array);
console.log(finalArray);

代码说明

  1. 分组逻辑:用period-type-code拼接成唯一键,保证相同条件的元素被分到同一组
  2. 字段初始化:首次创建分组时,根据元素id直接赋值对应字段,另一字段设为空
  3. 合并处理:同组后续元素直接覆盖对应字段值,若需求为求和,可将赋值改为累加逻辑
  4. 结果转换:将分组容器的value集合转为数组,输出最终格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:29