我们有一个对象数组,其中进一步包含这样的嵌套对象-
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 } ]