//自上而下进行数量累计计算
function updateTreeDataAdd(treeData,fieldName){
for(var i=0;i<treeData.length;i++){
//只有存在子集时,才进行累加计算,否则不修改自身属性值
if(treeData[i].children&&treeData[i].children.length>0){
//递归遍历并修改children的对应值
treeData[i].children = updateTreeDataAdd(treeData[i].children,fieldName);
var addSum = 0.00;
//循环相加计算和
for(var j=0;j<treeData[i].children.length;j++){
var childNum = treeData[i].children[j][fieldName];
addSum = accAdd(changeTwoDecimal(addSum), changeTwoDecimal(Number(childNum.replace(new RegExp(",","gm"),""))));
}
//赋值
treeData[i][fieldName] = formatMoney(addSum,2);
}else if(!treeData[i][fieldName]){
treeData[i][fieldName] = formatMoney(0.00,2);
}
}
return treeData;
}
如果有多个字段参与计算,可以传一个数组:
//自上而下进行数量累计计算
function updateTreeDataAdd(treeData,fieldNameArray){
for(var i=0;i<treeData.length;i++){
//只有存在子集时,才进行累加计算,否则不修改自身属性值
if(treeData[i].children&&treeData[i].children.length>0){
//递归遍历并修改children的对应值
treeData[i].children = updateTreeDataAdd(treeData[i].children,fieldNameArray);
for(var k=0;k<fieldNameArray.length;k++){
var fieldName = fieldNameArray[k];
var addSum = 0.00;
//循环相加计算和
for(var j=0;j<treeData[i].children.length;j++){
var childNum = treeData[i].children[j][fieldName];
addSum = accAdd(changeTwoDecimal(addSum), changeTwoDecimal(Number(childNum.replace(new RegExp(",","gm"),""))));
//赋值
treeData[i][fieldName] = formatMoney(addSum,2);
}
}
}else{
for(var k=0;k<fieldNameArray.length;k++){
var fieldName = fieldNameArray[k];
if(!treeData[i][fieldName]){
treeData[i][fieldName] = formatMoney(0.00,2);
}
}
}
return treeData;
}
当然,如果自己有个性化的计算需要也可以自己修改参数,把自己的计算逻辑放进去
JavaScript递归计算树形结构节点总值
本文介绍如何使用JavaScript自上而下递归遍历树结构,并根据多个字段计算节点的总值。通过传入计算字段数组,可以灵活实现个性化计算需求。
1991

被折叠的 条评论
为什么被折叠?



