假设我们有以下的树形结构数据:

const data = {
  id: 1,
  name: 'root',
  children: [
    {
      id: 2,
      name: 'child1',
      children: [
        {
          id: 4,
          name: 'grandchild1',
          children: []
        },
        {
          id: 5,
          name: 'grandchild2',
          children: []
        }
      ]
    },
    {
      id: 3,
      name: 'child2',
      children: [
        {
          id: 6,
          name: 'grandchild3',
          children: []
        }
      ]
    }
  ]
};

我们可以通过递归的方式遍历每个对象,并增加 path 属性来表示层级关系。同时,我们可以通过返回新数据格式的方式来得到处理后的数据。下面是一个实现的示例代码:

function addPathToTree(data, path = '0') {
  const newPath = path + '.';

  // 如果数据没有子节点,则直接返回
  if (!data.children || !data.children.length) {
    return { ...data, path };
  }

  // 如果数据有子节点,则递归遍历子节点
  const newChildren = data.children.map((child, index) => {
    const childPath = newPath + index;
    return addPathToTree(child, childPath);
  });

  // 返回处理后的数据
  return { ...data, path, children: newChildren };
}

const newData = addPathToTree(data);
console.log(newData);

输出结果为:

{
  "id": 1,
  "name": "root",
  "path": "0",
  "children": [
    {
      "id": 2,
      "name": "child1",
      "path": "0.0",
      "children": [
        {
          "id": 4,
          "name": "grandchild1",
          "path": "0.0.0",
          "children": []
        },
        {
          "id": 5,
          "name": "grandchild2",
          "path": "0.0.1",
          "children": []
        }
      ]
    },
    {
      "id": 3,
      "name": "child2",
      "path": "0.1",
      "children": [
        {
          "id": 6,
          "name": "grandchild3",
          "path": "0.1.0",
          "children": []
        }
      ]
    }
  ]
}

可以看到,每个对象都增加了 path 属性来表示层级关系,并且返回了一个新的数据格式。

ES6 递归遍历树形结构,添加层级路径并返回新数据格式

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

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