我有一个嵌套对象的示例数组:
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: []}
]}
]}
];
我也有一个平面结构中的所有对象的数组。
解决方案?
答案 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;
}