如何统计 JavaScript 嵌套对象的嵌套级别?


我们有一个对象数组,其中嵌套了像这样类似的对象 −

const arr = [{
   id: 0, children: []
}, {
      id: 1, children: [{
      id: 2, children: []
}, {
      id: 3, children: [{
         id: 4, children: []
      }]
   }]
}];

我们的工作是编写一个递归函数,比如 assignDepth(),它接受这个数组,并为每个嵌套对象分配 depth 属性。比如,id 为 0 的对象深度为 0,id 为 1 的深度也是 1,因为 id 为 2 和 id 为 3 嵌套在 id 为 1 中,所以它们的深度为 1,而 id 为 4 进一步嵌套在 id 为 3 中,所以深度为 2。

因此,让我们编写这个函数的代码。这是一个简单的递归函数,它会不断迭代子对象直到到达数组的末尾 −

示例

const arr = [{
   id: 0, children: []
}, {
      id: 1, children: [{
      id: 2, children: []
}, {
      id: 3, children: [{
         id: 4, children: []
      }]
   }]
}];
const assignDepth = (arr, depth = 0, index = 0) => {
   if(index < arr.length){
      arr[index].depth = depth;
      if(arr[index].children.length){
         return assignDepth(arr[index].children, depth+1, 0);
      };
      return assignDepth(arr, depth, index+1);
   };
   return;
};
assignDepth(arr);
console.log(JSON.stringify(arr, undefined, 4));

输出

控制台的输出如下 −

[
   {
      "id": 0,
      "children": [],
      "depth": 0
   },
   {
      "id": 1,
      "children": [
         {
            "id": 2,
            "children": [],
            "depth": 1
         },
         {
            "id": 3,
            "children": [
               {
                  "id": 4,
                  "children": [],
                  "depth": 2
               }
            ],
            "depth": 1
         }
      ],
      "depth": 0
   }
]

更新时间:25-Aug-2020

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始
广告