javascript - 父值作为嵌套 javascript 对象中所有子值的总和

标签 javascript recursion lodash

我有一个嵌套很深的 javascript 对象,其中包含无限数量的子对象。每个 child 都有一个值和一个总值。 totalValue 应该是其所有子项和子项的所有值的总和。我怎样才能使它工作?

目前我只能使用递归函数循环整个对象:

// Recursive function
_.each(names, function(parent) { 
    if(parent.children.length > 0) { 
        recursiveFunction(parent.children);
    }
});

function recursiveFunction(children){ 
    _.each(children, function(child) { 
        if(child.children.length > 0) { 
            recursiveFunction(child.children)
        }
    });
}; 

// Deeply nested javascript object
var names = {
    name: 'name-1',
    value: 10,
    valueTotal: 0, // should be 60 (name-1.1 + name-1.2 + name-1.2.1 + name-1.2.2 + name-1.2.2.1 + name-1.2.2.2)
    children: [{
            name: 'name-1.1',
            value: 10,
            valueTotal: 0,
            children: []
        }, {
            name: 'name-1.2',
            value: 10,
            valueTotal: 0, // should be 40 (name-1.2.1 + name-1.2.2 + name-1.2.2.1 + name-1.2.2.2)
            children: [{
                name: 'name-1.2.1',
                value: 10,
                valueTotal: 0,
                children: []
            }, {
                name: 'name-1.2.2',
                value: 10,
                valueTotal: 0, // should be 20 (name-1.2.2.1 + name-1.2.2.2)
                children: [{
                    name: 'name-1.2.2.1',
                    value: 10,
                    valueTotal: 0,
                    children: []
                }, {
                    name: 'name-1.2.2.2',
                    value: 10,
                    valueTotal: 0,
                    children: []
                }]
            }]
        }]
    }
}

最佳答案

所以事实上你想这样做: 每个元素都向他的 child 询问它的值,这些元素也这样做并返回他们的 totalValues 加上他们自己的值(value)。

function sumUp(object){
  object.totalValue = 0;
  for(child of object.children){
    object.totalValue += sumUp(child);
   }
   return object.totalValue + object.value;
}

这样开始:

const totalofall = sumUp(names);
console.log(names); //your expected result.

工作示例: http://jsbin.com/laxiveyoki/edit?console

关于javascript - 父值作为嵌套 javascript 对象中所有子值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745837/

相关文章:

c++ - 求二叉树的平均值 C++

python - 使用递归的列表列表

node.js - lodash 检查 object.path 是否等于值

javascript - 如何从 AngularJS Controller 调用自定义 Javascript 函数?

javascript - 拉力赛标签云

javascript - 获取 parent 的 key

javascript - Electron:在 mainWindow 加载时使用 mainWindow.webContents.send

python - django 模型递归导入 - 如何解决

javascript - lodash/underscore 通过数组值中的键查找对象

javascript - 使用 lodash 比较 2 个数组