我正在寻找一种算法将数组中的嵌套元素链接到它们的父元素。可能是递归的。这是一个数组示例https://jsfiddle.net/g2xh5r97/
我想让每个元素的每个子元素都有“parentId”,它将其链接到其父元素的 ID。 每个元素的每个子元素都可能有自己的子元素,并且不知道这种嵌套有多深。
例如:
arr[0].id === '1'; // (already has it's own ID)
arr[0].children[0].id === '1-1'; // (already has it's own ID
arr[0].children[0].parentId === '1'; // (parentId should be added to this element)
这是我尝试做的事情
const linkNestedElements = (arr2, parentId) => {
for (let item of arr2) {
item.parentId = parentId;
if (item.children && item.children.length) {
item.children = linkNestedElements(item.children, item.id);
}
return arr2;
}
}
const linkElements = (arr) => {
for (let item of arr) {
let currentId = item.id;
if (item.children && item.children.length) {
item.children = linkNestedElements(item.children, item.id)
}
}
return arr;
}
它只修改第一个嵌套元素,其他所有元素要么被忽略,要么被删除,具体取决于此的变化
你的代码很好。但在第一个函数中,循环在第一次迭代时被中断。您需要将
return
语句移出该循环:
const linkNestedElements = (arr2, parentId) => {
for (let item of arr2) {
item.parentId = parentId;
if (item.children && item.children.length) {
item.children = linkNestedElements(item.children, item.id);
}
}
return arr2; // <--- moved here
}