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

如何按classNumber合并嵌套数组对象并聚合status属性值

解决嵌套数组合并:按classNumber分组合并status属性

别担心,这个问题其实可以通过两步轻松解决:先把多层嵌套的数组扁平化,再按classNumber分组合并对应的属性。我给你两种方案,原生JS和Lodash的,都能实现需求。


原生JavaScript实现

步骤1:扁平化嵌套数组

首先用flat()方法把你的多层嵌套数组转成一维数组,这样后续处理更简单:

const nestedArray = [ 
  [ 
    { classNumber: '2', status: 'A', terms: [] }, 
    { classNumber: '32', status: 'B', terms: [] }, 
    { classNumber: '44', status: 'C', terms: [] } 
  ], 
  [ 
    { classNumber: '2', status: 'B', terms: [] }, 
    { classNumber: '31', status: 'A', terms: [] } 
  ]
];

// 扁平化数组
const flattenedArray = nestedArray.flat();

步骤2:分组合并属性

用reduce()遍历扁平化后的数组,以classNumber为键构建临时对象,收集相同class的status,最后转成目标数组:

const mergedResult = Object.values(flattenedArray.reduce((acc, currentItem) => {
  // 如果当前classNumber还没在累加器里,初始化条目
  if (!acc[currentItem.classNumber]) {
    acc[currentItem.classNumber] = {
      classNumber: currentItem.classNumber,
      status: [],
      terms: currentItem.terms // 假设同class的terms一致,直接取当前项的
    };
  }
  // 将当前status加入数组(如果需要去重可以加判断)
  acc[currentItem.classNumber].status.push(currentItem.status);
  return acc;
}, {}));

console.log(mergedResult);
// 输出就是你想要的结构:
// [ 
//   { classNumber: '2', status: [ 'A', 'B' ], terms: [] }, 
//   { classNumber: '32', status: [ 'B' ], terms: [] }, 
//   { classNumber: '44', status: [ 'C' ], terms: [] },
//   { classNumber: '31', status: [ 'A' ], terms: [] } 
// ]

可选:去重status

如果你的数据里可能出现同一个classNumber重复的status,可以用Set来去重:

acc[currentItem.classNumber].status = [...new Set([
  ...acc[currentItem.classNumber].status, 
  currentItem.status
])];

Lodash实现

如果你还是想用Lodash,试试这个组合方法:

const _ = require('lodash');

const mergedResult = Object.values(_.mapValues(
  // 先扁平化数组,再按classNumber分组
  _.groupBy(_.flatMap(nestedArray), 'classNumber'),
  // 处理每个分组,生成目标结构
  (group) => ({
    classNumber: group[0].classNumber,
    status: _.map(group, 'status'), // 提取所有status组成数组
    terms: group[0].terms
  })
));

这里_.flatMap负责扁平化数组,_.groupBy按classNumber分组,最后_.mapValues把每个分组转换成你需要的对象结构。


核心思路就是先把嵌套结构拆平,再按唯一标识(classNumber)聚合属性,这样不管嵌套多少层都能处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:47:42