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

如何按指定属性对对象数组分组并保留原对象属性

按指定属性分组对象数组并合并value为数组

我有一个对象数组,希望按照其中某个属性进行分组,生成新的对象数组,保留原对象的所有属性,并新增一个属性将所有value属性合并为数组。以下是输入示例与期望输出:

输入

[
  {
    group_by_this_property: 1,
    value: 100,
    class: 'A',
  },
  {
    group_by_this_property: 1,
    value: 101,
    class: 'A',
  },
  {
    group_by_this_property: 1,
    value: 102,
    class: 'A',
  },
  {
    group_by_this_property: 2,
    value: 200,
    class: 'B',
  },
  {
    group_by_this_property: 2,
    value: 201,
    class: 'B',
  }
]

期望输出

[
  {
    group_by_this_property: 1,
    values: [100, 101, 102],
    class: 'A',
  },
  {
    group_by_this_property: 2,
    values: [200, 201],
    class: 'B',
  },
]

实现代码

const input = [/* 上述输入数组 */];

// 按指定属性分组并合并values
const groupedResult = input.reduce((acc, item) => {
  const groupKey = item.group_by_this_property;
  // 初始化分组
  if (!acc[groupKey]) {
    // 复制原对象属性,移除value,新增values数组
    acc[groupKey] = { ...item, values: [] };
    delete acc[groupKey].value;
  }
  // 收集当前item的value
  acc[groupKey].values.push(item.value);
  return acc;
}, {});

// 将分组对象转为数组
const output = Object.values(groupedResult);

console.log(output);

通用封装版本

如果需要支持任意分组属性,可以封装成可复用函数:

function groupByAndMergeValues(arr, groupProp) {
  return Object.values(arr.reduce((acc, item) => {
    const key = item[groupProp];
    if (!acc[key]) {
      acc[key] = { ...item, values: [] };
      delete acc[key].value;
    }
    acc[key].values.push(item.value);
    return acc;
  }, {}));
}

// 使用示例
const result = groupByAndMergeValues(input, 'group_by_this_property');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:55:42