当前位置: 首页 > 知识库问答 >
问题:

javascript - js树形结构父节点等于直属子节点相加 求答案?

訾淇
2023-05-08

父节点的分数值socre等于直属子节点的score之和,只有最有一级节点的score有值,所以需要倒序求出每个父节点score的值,没想出来要怎么搞,求助大神的帮助

总结就是:3级加起来等于2级,2级加起来等于1级

let treeData = [{
    level: "1",
    parentCode: "0",
    score: "",
    setItemCode: "cdx10031",
    setItemContent: "一级内容1",
    sortNumber: 1,
    children: [{
        level: "2",
        parentCode: "cdx10031",
        score: "",
        setItemCode: "cdx10061"
        setItemContent: "二级内容1-1"
        sortNumber: 1,
        children: [{
            level: "3",
            parentCode: "cdx10061",
            score: "1",
            setItemCode: "cdx10090"
            setItemContent: "三级级内容1-1-1"
            sortNumber: 1,
        },{    
            level: "3",
            parentCode: "cdx10061",
            score: "2",
            setItemCode: "cdx10091"
            setItemContent: "三级内容1-1-2"
            sortNumber: 2,
            }]
    },{    
        level: "2",
        parentCode: "cdx10031",
        score: "",
        setItemCode: "cdx10062"
        setItemContent: "二级内容1-2"
        sortNumber: 2,
        children: [{
            level: "3",
            parentCode: "cdx10062",
            score: "3",
            setItemCode: "cdx10092"
            setItemContent: "三级级内容1-2-1"
            sortNumber: 1,
        },{    
            level: "3",
            parentCode: "cdx10062",
            score: "4",
            setItemCode: "cdx10093"
            setItemContent: "三级内容1-2-2"
            sortNumber: 2,
            }]
    }]
},{
    level: "1",
    parentCode: "0",
    score: "",
    setItemCode: "cdx10035",
    setItemContent: "一级内容2",
    sortNumber: 2,
    children: [{
        level: "2",
        parentCode: "cdx10035",
        score: "",
        setItemCode: "cdx10065"
        setItemContent: "二级内容2-1"
        sortNumber: 1,
        children: [{
            level: "3",
            parentCode: "cdx10065",
            score: "1",
            setItemCode: "cdx10095"
            setItemContent: "三级级内容2-1-1"
            sortNumber: 1,
        },{    
            level: "3",
            parentCode: "cdx10065",
            score: "2",
            setItemCode: "cdx10096"
            setItemContent: "三级内容2-1-2"
            sortNumber: 2,
            }]
    },{    
        level: "2",
        parentCode: "cdx10035",
        score: "",
        setItemCode: "cdx10066"
        setItemContent: "二级内容2-2"
        sortNumber: 2,
        children: [{
            level: "3",
            parentCode: "cdx10066",
            score: "3",
            setItemCode: "cdx10097"
            setItemContent: "三级级内容2-2-1"
            sortNumber: 1,
        },{    
            level: "3",
            parentCode: "cdx10066",
            score: "4",
            setItemCode: "cdx10098"
            setItemContent: "三级内容2-2-2"
            sortNumber: 2,
            }]
    }]
}]

共有3个答案

景育
2023-05-08
function updateTreeScore(tree) {
  tree.forEach(node => node.score = (node.children?.[0]?.score ? node.children : updateTreeScore(node.children)).reduce((sum, v) => sum + (+v.score||0), 0) )
  return tree
}
updateTreeScore(treeData)
顾超
2023-05-08
function calculateScore(node) {
   
    if (!node.children || node.children.length === 0) {
        return parseInt(node.score, 10);
    }
    let totalScore = 0;
    for (let child of node.children) {
        totalScore += calculateScore(child);
    }
    node.score = totalScore;

    return totalScore;
}

treeData.forEach(node => {
    calculateScore(node);
});

console.log(treeData);
颜光临
2023-05-08

先算出二级的score,之后再算一级的score

level2Score(countyTargetData, {}, '3')
level2Score(countyTargetData, {}, '2')
function level2Score(tableArr, row, level) {
  for (var i = 0; i < tableArr.length; i++) {
    if (tableArr[i].level === level) {
      row.score = Add(row.score, tableArr[i].score)
    }
    if (tableArr[i].children && tableArr[i].children.length > 0) {
          if (tableArr[i].level * 1 + 1 === level * 1) {
            tableArr[i].score = 0
          }
          level2Score(tableArr[i].children, tableArr[i], level)
        }
    }
}
 类似资料:
  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 我是 D3 的新手。因此,我正在尝试呈现一个图形,其中两个或多个孩子可以具有相同的父级。我想知道如何使链接再次定向到同一节点?我有断开的链接.. 任何帮助都是巨大的。 这是我的代码...

  • 问题内容: 我正在使用nltk的Tree数据结构来处理parsetree字符串。 但是,数据结构似乎受到限制。是否可以通过其字符串值获取节点,然后导航至顶部或底部? 例如,假设您要获取字符串值为 ‘nice’ 的节点,然后查看其父级,子级等是什么?可以通过nltk的Tree实现该节点吗? 问题答案: 对于NLTK 3.0,您想使用ParentedTree子类。 http://www.nltk.or

  • pre { white-space: pre-wrap; } 通常表示一个树节点的方式就是在每一个节点存储一个 parentid。 这个也被称为邻接列表模型。 直接加载这些数据到树形菜单(Tree)是不允许的。 但是我们可以在加载树形菜单之前,把它转换为标准标准的树形菜单(Tree)数据格式。 树(Tree)插件提供一个 'loadFilter' 选项函数,它可以实现这个功能。 它提供一个机会来改

  • 上面的数组 id=311的父节点是 id=31,id=2的父节点为null; 请问应该怎么解决?

  • element ui 树状表格选择父节点子节点全选,子节点不全选父节点半选? el-table没有相关示例,需要手动实现好像?![上传中...]()