如何通过递归统计树形结构的各个节点的子节点数量

有一个树形结构的数据,想要统计它的各个节点的子节点数量,这个应该怎么弄啊?那位大佬帮帮忙啊?
数据结构类似于

const data=[
  {
    id: "z234s-sd232-dd423",
    title: "中华人民共和国",
    parentId: "",
    children: [
      {
        id: "gsd23-dds31-dll42",
        title: "贵州省",
        parentId: "z234s-sd232-dd423",
        children: [
          {
            id: "gy023-87sd2-33dw2",
            title: "贵阳市",
            parentId: "gsd23-dds31-dll42",
          },
        ],
      },
      {
        id: "fj873-ops23-ys7ds",
        title: "福建省",
        parentId: "z234s-sd232-dd423",
      },
    ],
  },
];

需要通过递归的方式在各个节点上添加一个属性childCount,然后这个childCount的值是该节点的所有子节点数量之和.

阅读 7.3k
1 个回答
const data=[
  {
    id: "z234s-sd232-dd423",
    title: "中华人民共和国",
    parentId: "",
    children: [
      {
        id: "gsd23-dds31-dll42",
        title: "贵州省",
        parentId: "z234s-sd232-dd423",
        children: [
          {
            id: "gy023-87sd2-33dw2",
            title: "贵阳市",
            parentId: "gsd23-dds31-dll42",
          },
        ],
      },
      {
        id: "fj873-ops23-ys7ds",
        title: "福建省",
        parentId: "z234s-sd232-dd423",
      },
    ],
  },
];
// 设置每个节点的统计字段,并返回所有节点总数。
var toTreeCount = (data=[], countField='count')=>data.reduce((total,cur)=>(total+(cur[countField] = toTreeCount(cur.children||[], countField))),data.length);
console.log(toTreeCount(data,'childCount'),data);

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题