用于链接嵌套数组元素与其父元素的 JS 算法

问题描述 投票:0回答:1

我正在寻找一种算法将数组中的嵌套元素链接到它们的父元素。可能是递归的。这是一个数组示例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;
}

它只修改第一个嵌套元素,其他所有元素要么被忽略,要么被删除,具体取决于此的变化

javascript algorithm multidimensional-array
1个回答
0
投票

你的代码很好。但在第一个函数中,循环在第一次迭代时被中断。您需要将

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
}
© www.soinside.com 2019 - 2024. All rights reserved.