场景:现需要一个树形数据,计算出每个层级下,子集中某个参数的累加和
let nodes= [
{
title: '顶顶顶顶',
key: '0-0',
num: 0,
expanded: true,
children: [
{
title: '啊啊啊啊',
key: '0-0-0',
num: 100,
checked: true,
isLeaf: true,
},
{
title: '大大大',
key: '0-0-1',
checked: true,
isLeaf: true,
num: 100,
},
]
},
{
title: '反反复复',
key: '0-1',
num: 0,
children: [
{
title: '灌灌灌灌',
num: 100,
key: '0-1-0-0',
checked: true,
isLeaf: true
},
{
title: '呜呜呜呜',
num: 100,
key: '0-2-0-0',
checked: false,
isLeaf: true
},
]
}
];
changeTreeData(nodes: any): void {
nodes.forEach((item: any) => {
if (item.children) {
item.children = this.changeTreeData(item.children);
item.num = 0;
item.children.forEach((elm: any) => {
item.num += elm.num;
})
}
})
return nodes;
}
this.changeTreeData(nodes);
场景二:同场景1需求,附加仅支持勾选复选框的累加
let nodes= [
{
title: '顶顶顶顶',
key: '0-0',
num: 0,
expanded: true,
children: [
{
title: '啊啊啊啊',
key: '0-0-0',
num: 100,
checked: true,
isLeaf: true,
},
{
title: '大大大',
key: '0-0-1',
checked: true,
isLeaf: true,
num: 100,
},
]
},
{
title: '反反复复',
key: '0-1',
num: 0,
children: [
{
title: '灌灌灌灌',
num: 100,
key: '0-1-0-0',
checked: true,
isLeaf: true
},
{
title: '呜呜呜呜',
num: 100,
key: '0-2-0-0',
checked: false,
isLeaf: true
},
]
}
];
changeTreeData(nodes: any): void {
nodes.forEach((item: any) => {
if (item.children) {
item.children = this.changeTreeData(item.children);
item.num = 0;
item.children.forEach((elm: any) => {
if (elm.checked && elm.isLeaf) {
item.num += elm.num;
}
})
if (item.num === 0) {
item.num = this.changeTotal(item);
}
}
})
return nodes;
}
changeTotal(itemObj: any): any {
let sum = itemObj.num;
if (itemObj.children && itemObj.children.length > 0) {
for (let child of itemObj.children) {
if (!child.isLeaf) {
sum += child.num;
}
}
}
return sum;
}
this.changeTreeData(nodes);
网友评论