const tableData = [
{
id: 1,
title: '园区1',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
children: [
{
id: 11,
parentId: 1,
title: '集团1',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
{
id: 12,
parentId: 1,
title: '集团2',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
children: [
{
id: 11,
parentId: 12,
title: '公司1',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
{
id: 11,
parentId: 12,
title: '公司2',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
],
},
],
},
{
id: 2,
title: '园区2',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
children: [
{
id: 21,
parentId: 2,
title: '集团1',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
{
id: 22,
parentId: 2,
title: '集团2',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
children: [
{
id: 221,
parentId: 22,
title: '公司1',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
{
id: 222,
parentId: 22,
title: '公司2',
count1: 0,
count2: 0,
count3: 0,
num1: 0,
num2: 0,
num3: 0,
num4: 0,
},
],
},
],
},
]
计算规则
count1要等于所有子集的 count1 相加
count2要等于所有子集的 count2 相加
count3要等于所有子集的 count3 相加
num1要等于所有子集的 num1 相加
num2要等于所有子集的 num2 相加
num3要等于所有子集的 num3 相加
...依此类推
这是demo,麻烦务必请看一眼demo,感觉看页面清晰一点,也能表达明白我的意思
https://element-plus.run/#eyJ...
实现了,但是我是一层一层写的,帮忙看下能否用递归,不然层级是不固定的
https://element-plus.run/#eyJ...
感谢各位提供的思路,已经实现了,谢谢
回答的时候魔怔了,两种办法都有点奇怪。实际上只从叶到根依次计算的话,只需要重算每个节点当时子节点的数据之和就行了,不需要全算,也不需要算差值。
其中
findNode
可以参考下面的原回答(map
和findInTree
都可以)。另外,针对作者的原回答(总算是打开了 Demo),做了一些优化处理:我认为
findRow()
应该是找一个节点,所以改了下。另外,calc()
实际上是在calcParent()
,所以我改了个名字。然后 calc 可以优化成循环,不需要使用递归。修改后的代码:
修改后的 Demo 在这里
应该需要从上往下递归重算,因为虽然改的只是一叶结点,回溯上去只有一条路径,但是每个父节点上的数据都是其所有子结点数据之和,必须要拿所有子节点的数据来重算。
但是,如果能得到改变量的话,这个过程就可以简化了,只需要按 parentId 一直回溯,使用改变量来修改每个父节点的数据即可。
试验代码:为了找一个叶节点出来修改,所以写了个简易的 find 函数
最近写了一篇关于这种计算的博客:树,计算父节点的值