【问题标题】:Create nested array form an array of objects从对象数组创建嵌套数组
【发布时间】:2021-11-28 16:23:57
【问题描述】:

我有一个这样的对象数组

  [
   {id :1, parent : null, title:test},
   {id :2, parent : 1, title:test2},
   {id :3, parent : 2, title:test3},
 .
 .
 .
  ]

并且需要这样安排的功能 输出:

[
 {id :1, parent : null, title:test,
 sub:[
   {id :2, parent : 1, title:test2,
    sub :[
     {id :3, parent : 2, title:test3},
    ]
   },
 ]},
.
.
.
]

所以处理深度嵌套

【问题讨论】:

    标签: javascript node.js reactjs json object


    【解决方案1】:

    这样的事情应该可以满足您的要求:

    function nestArrays(arr) {
      let retval = [];
      for (let i = data.length - 1; i >= 0; i--) {
        const isLastElement = i < data.length - 1;
        retval.push(
          isLastElement
            ? {
                ...data[i],
                sub: [retval[retval.length - 1]],
              }
            : data[i]
        );
      }
      return retval;
    }

    【讨论】:

      【解决方案2】:

      您可以遍历您的对象,尝试通过 ID 找到它的父对象,如果父对象不存在,则在其上创建一个 sub 属性,最后将当前对象推送到 sub 数组:

      const objects = [
         { id: 1, parent: null, title: "test" },
         { id: 2, parent: 1, title: "test2" },
         { id: 3, parent: 2, title: "test3" },
         { id: 4, parent: 2, title: "test4" },
      ];
      
      // This result array will contain all root objects, 
      // e.g. those with `parent === null`
      const roots = [];
      
      for (const object of objects) {
        if (object.parent === null) {
          roots.push(object);
        }
        else {
          const parent = objects.find(o => o.id === object.parent);
          if (parent) {
            (parent.sub ||= []).push(object);
          }
        }
      }
      
      console.log(JSON.stringify(roots, null, 2));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-06
        • 2019-04-23
        • 2021-08-02
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多