如何按指定字段分组聚合,将对象数组映射为嵌套数组结构
JS按字段分组生成嵌套数组实现
核心逻辑是先按n字段做分组聚合,再将分组结果转换为要求的嵌套数组结构,无需引入额外工具库,原生JS即可实现。
完整实现代码
// 原始输入数组 const source = [ { "n": "David", "t": 1, "o": "2" }, { "n": "Paul", "t": 3, "o": "4" }, { "n": "David", "t": 5, "o": "6" }, { "n": "David", "t": 7, "o": "8" }, { "n": "Paul", "t": 9, "o": "10" } ]; // 第一步:按n字段分组,聚合同组的t、o属性为子数组 const groupResult = source.reduce((groupMap, item) => { const groupKey = item.n; if (!groupMap[groupKey]) { groupMap[groupKey] = []; } groupMap[groupKey].push([item.t, item.o]); return groupMap; }, {}); // 第二步:将分组对象转为目标嵌套数组结构 const target = Object.entries(groupResult);
结果验证
运行上述代码后target的输出和需求给出的目标结构完全一致:
[ [ "David", [ [1, "2"], [5, "6"], [7, "8"] ] ], [ "Paul", [ [3, "4"], [9, "10"] ] ] ]
说明:ES2015及后续版本规范中,
Object.entries对字符串键的返回顺序和键第一次被插入的顺序一致,即最终结果里的分组顺序,和原数组中对应n值首次出现的顺序完全匹配,和示例排序要求相符。
内容的提问来源于stack exchange,提问作者markzzz
相关产品推荐
相关产品推荐

