以下是一个使用递归的最优解的示例代码:

function transTreeData(data) {
  const map = {}; // 用于存储id和对应元素的映射关系
  const result = []; // 存储处理后的结果

  // 先将所有元素按照id存储到map中
  data.forEach((item) => {
    map[item.id] = item;
  });

  data.forEach((item) => {
    const parent = map[item.parentId];
    if (parent) {
      // 如果存在父元素,则将当前元素添加到父元素的children数组中
      (parent.children || (parent.children = [])).push(item);
    } else {
      // 如果不存在父元素,则将当前元素添加到结果数组中
      result.push(item);
    }
  });

  return result;
}

使用示例:

const data = [
  { id: 1, name: 'A', parentId: null },
  { id: 2, name: 'B', parentId: 1 },
  { id: 3, name: 'C', parentId: 1 },
  { id: 4, name: 'D', parentId: 2 },
  { id: 5, name: 'E', parentId: 3 },
  { id: 6, name: 'F', parentId: 3 },
];

const result = transTreeData(data);

console.log(result);

输出结果:

[
  {
    "id": 1,
    "name": "A",
    "parentId": null,
    "children": [
      {
        "id": 2,
        "name": "B",
        "parentId": 1,
        "children": [
          {
            "id": 4,
            "name": "D",
            "parentId": 2
          }
        ]
      },
      {
        "id": 3,
        "name": "C",
        "parentId": 1,
        "children": [
          {
            "id": 5,
            "name": "E",
            "parentId": 3
          },
          {
            "id": 6,
            "name": "F",
            "parentId": 3
          }
        ]
      }
    ]
  }
]

以上代码使用了两个辅助变量,一个是map,用于将元素的id和元素本身建立映射关系,方便通过id查找元素。另一个是result,用于存储处理后的结果。

首先,将所有元素按照id存储到map中。然后遍历data数组,对于每个元素,判断其父元素是否存在,如果存在,则将当前元素添加到父元素的children数组中;如果不存在,则将当前元素添加到结果数组中。

通过递归调用,可以处理嵌套层级不止一层的情况

js写一个transTreeDatadata函数 对传入的data数组进行处理 data为包含多个对象元素的数组当某个元素的parentId不为空时会将其加入到原data数组中id值为该元素parentId值的元素的children属性数组中 嵌套层级不止一层 需要递归调用 给出最优解

原文地址: https://www.cveoy.top/t/topic/iNWF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录