工程实践

【magic-api】树形结构递归计算各个节点子节点数值之和

· 三面体

import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeUtil; /** * 基于内存递归计算,避免多次查库导致运行缓慢 */ var groupList = [ {"id": 1, "parentId":

magic-api
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;

/**
 * 基于内存递归计算,避免多次查库导致运行缓慢
 */

var groupList = [
    {"id": 1, "parentId":-1, "num":1},
    {"id": 2, "parentId":1,"num":1},
    {"id": 3, "parentId":2,"num":1},
]

var  getChildNum = (obj)=>{

    var childList = []
    for (item in groupList) {
        if (item.parentId == obj.id){
            childList.add(item);
        }
    }
    obj.totalNum = obj.num;
    if (childList != null && childList.size() > 0){
        for (item in childList) {
            getChildNum(item);
            obj.totalNum = obj.totalNum + item.totalNum;
        }
    }else{
        return obj;
    }
}
for (item in groupList) {
    getChildNum(item);
}

// 不需要转变为树形结构可以直接返回
// return groupList;

//转变为树形结构
var config = new TreeNodeConfig();
config.setIdKey("id");
config.setParentIdKey("parentId");

var treeObj = TreeUtil.build(groupList, -1, config, ((object, treeNode) -> {
    treeNode.setId(object.get("id"));
    treeNode.setParentId(object.get("parentId"));
    treeNode.putExtra("num", object.get("num"));
    treeNode.putExtra("totalNum", object.get("totalNum"));
}));
return treeObj