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

如何在JavaScript中按指定字段对对象数组进行分组重组

解决JavaScript数组按title分组重组的问题

没问题!我来帮你搞定这个数组分组的需求~你想要把相同title的项合并到同一个对象的values数组里,用JavaScript的reduce方法就能轻松实现,这是处理这类分组场景的常用方案。

完整代码示例

const input = [ 
  {title: 'head', value: 'a', amount: 10}, 
  {title: 'head', value: 'b', amount: 5}, 
  {title: 'body', value: 'c', amount: 20} 
];

const output = Object.values(input.reduce((acc, item) => {
  // 检查当前title是否已在累加器中存在
  if (!acc[item.title]) {
    // 不存在则创建新的分组对象
    acc[item.title] = {
      title: item.title,
      values: []
    };
  }
  // 将当前项的value和amount添加到对应分组的values数组中
  acc[item.title].values.push({
    value: item.value,
    amount: item.amount
  });
  return acc;
}, {}));

console.log(output);
// 输出结果就是你想要的结构:
// [
//   {title: 'head', values: [{value: 'a', amount: 10}, {value: 'b', amount: 5}]},
//   {title: 'body', values: [{value: 'c', amount: 20}]}
// ]

代码解释

  • reduce方法:它会遍历input数组的每一项,通过一个“累加器”(acc)来逐步构建我们需要的分组结构。初始时累加器是一个空对象{}。
  • 分组判断:对于每个数组项,我们先检查累加器里是否已经有以当前title为键的属性。如果没有,就创建一个包含title和空values数组的新对象;如果有,就直接复用已有的分组对象。
  • 添加子项:把当前项的value和amount提取出来,组成新对象后推入对应分组的values数组。
  • 转换为数组:最后用Object.values()把累加器对象的所有值提取出来,就得到了你需要的数组结构。

如果你的a、b、c是已经定义好的变量,直接替换掉代码里的字符串'a'、'b'、'c'就行啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:07:26