如何对孩子父数组的值进行总结

时间:2017-05-15 03:53:55

标签: javascript jquery arrays tree parent

我有这种树阵, 这是我的数组的实际数据 https://pastebin.com/xtfpyKiE

每个项目都有id,parent_id和值,

id:1,
name:A,
value:0
   |
   ----id:2
       parent:1,
       name:B,
       value : 10
         |
         ------id:3,
               parent:2,
               name :C,
               value : 12
                  |
                   ------id:4,
                         parent:3,
                         name :D,
                         value : 14

如何按父ID对值进行求和, 从最底层的孩子到最高的父母,

所以我可以得到A:36的价值, B值:36, 值C:26,

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以使用解构赋值来获取对象的嵌套属性,并将检索到的值按顺序分配给数组。从数组一次使用一个循环到.splice()两个元素来创建具有A:36,B:36,C:26对的对象,将对象推回到数组。

const data = {id:1, name:"A", value:0
             , parent:{id:2, name: "B", value: 10
               , parent:{id:3, name: "C", value: 12
                 , parent:{id:4, name: "D", value: 14}
                 }
               }
             };

let res = [];

({name:res[res.length], value:res[res.length]
, parent:{
    name:res[res.length], value:res[res.length]
    , parent:{
        name:res[res.length], value:res[res.length]
        , parent:{
            name:res[res.length], value:res[res.length]}}}} = data);

let k = res.length / 2;

while (res.length > k) {
  let [key, prop] = res.splice(0, 2);
  res.push({[key]:prop 
                  + (res[1] && !isNaN(res[1]) && res[1] || 0) 
                  + (res[3] && !isNaN(res[3]) && res[3] || 0) 
                  + (res[5] && !isNaN(res[5]) && res[5] || 0)
      });
}

// A : 36, value of B : 36, value of C : 26

console.log(res)