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

JavaScript如何将扁平化对象数组按parentId转换为嵌套结构

JavaScript扁平化数组转嵌套结构实现方案

实现思路

  • 用临时映射对象存储已出现的父级ID对应条目,避免重复遍历结果数组匹配父级,时间复杂度为O(n),效率更高
  • 遍历原始数组时做两个核心判断:父级是否已存在、拆分当前项的父子属性
  • 最终直接导出结果数组即可

完整实现代码

function convertFlatToNested(flatArr) {
  const parentMap = {};
  const result = [];

  flatArr.forEach(item => {
    // 拆分父级属性和子级属性
    const { parentId, parentName, ...childProps } = item;
    // 父级不存在时先初始化父级
    if (!parentMap[parentId]) {
      const parentItem = {
        id: parentId,
        name: parentName,
        children: []
      };
      parentMap[parentId] = parentItem;
      result.push(parentItem);
    }
    // 子属性加入对应父级的children数组
    parentMap[parentId].children.push(childProps);
  });

  return result;
}

// 测试用例
const originalArr = [
  {
    "parentId": "uniqueParentId1",
    "parentName": "Parent1",
    "childProp1": "test1",
    "childProp2": "test3"
  },
  {
    "parentId": "uniqueParentId2",
    "parentName": "Parent2",
    "childProp1": "somevals",
    "childProp2": "other vals"
  },
  {
    "parentId": "uniqueParentId2",
    "parentName": "Parent2",
    "childProp1": "somevals 1",
    "childProp2": "other vals 1"
  }
];

const nestedArr = convertFlatToNested(originalArr);
console.log(nestedArr); // 输出符合要求的嵌套结构

代码说明

  • 用对象解构+剩余运算符...childProps自动提取所有子属性,不用手动枚举子属性字段,适配子属性字段动态变化的场景
  • 映射对象parentMap通过键值对直接匹配父级,比每次遍历结果数组查找父级性能高,数据量越大优势越明显
  • 没有修改原始数组的内容,不会产生副作用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:06:05