如何计算嵌套对象的深度级别?

时间:2019-01-04 17:28:42

标签: javascript object nested depth

我有一个嵌套对象的示例数组:

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

我需要计算每个对象的深度级别。在所有对象中,我也都具有parentId属性。

结果应为:

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

我也有一个平面结构中的所有对象的数组。

解决方案?

4 个答案:

答案 0 :(得分:1)

只需使一个函数接受一个数组和一个depth参数,该参数将深度添加到数组中的所有对象。然后在children数组上以递增的深度调用它:

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

function addDepth(arr, depth = 0) {
  arr.forEach(obj => {
    obj.depth = depth
    addDepth(obj.children, depth + 1)
  })
}

addDepth(arr)
console.log(arr)

答案 1 :(得分:0)

您可以迭代数组并添加深度。

const
    depth = d => o => {
        o.depth = d;
        (o.children || []).forEach(depth(d + 1));
    };

let tree = [{ id: 0, children: [] }, { id: 1, children: [{ id: 2, children: [] }, { id: 3, children: [{ id: 4, children: [] }] }] }];

tree.forEach(depth(0));

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

function addDepth(arr, depth) {
  arr.map((entry) => {
    entry.depth = depth;
    addDepth(entry.children, depth+1);
  })
}

addDepth(arr, 0);

答案 3 :(得分:0)

您需要编写一个对您有用的函数。 试试这个。

function depth(o){
  var values;
  if (Array.isArray(o)) values = o;
  else if (typeof o === "object") values = Object.keys(o).map(k=>o[k]);
  return values ? Math.max.apply(0, values.map(depth))+1 : 1;
}