如何按projectIds分组并合并同项目下的children数组?
合并相同projectId的子项实现方案
可以用JavaScript的Array.prototype.reduce()方法快速实现这个分组合并需求,核心逻辑是按projectId分组,相同ID的项合并children数组,具体代码示例如下:
原数据示例
[ { "projectId": "proj1", "name": "项目1", "children": [{"id": "c1", "name": "子项1"}] }, { "projectId": "proj1", "name": "项目1", "children": [{"id": "c2", "name": "子项2"}] }, { "projectId": "proj2", "name": "项目2", "children": [{"id": "c3", "name": "子项3"}] } ]
处理代码
// 替换为你的原始数据 const originalProjects = [/* 原数据内容 */]; // 分组合并逻辑 const mergedProjects = Object.values( originalProjects.reduce((groupMap, currentItem) => { // 检查当前projectId是否已有分组 if (!groupMap[currentItem.projectId]) { // 首次出现则创建新分组,浅拷贝避免修改原对象 groupMap[currentItem.projectId] = { ...currentItem, children: [...currentItem.children] }; } else { // 已有分组则合并children数组 groupMap[currentItem.projectId].children.push(...currentItem.children); } return groupMap; }, {}) );
处理后结果
[ { "projectId": "proj1", "name": "项目1", "children": [{"id": "c1", "name": "子项1"}, {"id": "c2", "name": "子项2"}] }, { "projectId": "proj2", "name": "项目2", "children": [{"id": "c3", "name": "子项3"}] } ]
说明:如果相同projectId的项存在其他字段不一致的情况,可以根据需求调整逻辑,比如保留第一个项的字段,或者对字段做合并处理。
内容的提问来源于stack exchange,提问作者Jing c
相关产品推荐
相关产品推荐

