计算子对象节点值并将其添加到父对象

时间:2016-03-25 13:42:05

标签: javascript angularjs object

我正在使用angularJS。我的$ scope范围内有一些数据。我想要完成的是计算子对象节点的值并将其添加到父对象节点上。

我已经制作了一些代码而且它只能用于最后父母

$scope.data =
    [
        {
            name: "active",
            value: null,
            children:
            [
                {
                    name: "vast actief",
                    value: null,
                    children: 
                    [
                        {
                            name: "gebouwen",
                        value: [13, 540, 195, 200],
                        children: null
                        },
                        {
                            name: "tereinen",
                        value: [25, 20, 25, 50],
                        children: null
                        },
                    ]
                },
                {
                    name: "vlottend actief",
                    value: [215, 230, 245, 500],
                    children: null
                },
                {
                    name: "bewegend actief",
                    value: [134, 135, 136, 137],
                    children: null
                }
            ]
        },
        {
            name: "stilstaand",
            value: null,
            children:
            [
                {
                    name: "vast stilstaand",
                    value: [2000, 3000, 4000, 5000],
                    children: null
                },
                {
                    name: "vlottend stilstaand",
                    value: [2150, 2300, 2450, 5000],
                    children: null
                },
                {
                    name: "bewegend stilstaand",
                    value: [1340, 1350, 1360, 1370],
                    children: null
                }
            ]
        }
    ];

这是我创建的代码。使用此代码,它将循环直到children中的null属性,然后它将查看是否存在数据属性,如果有,它将计算其父数组的相同位置上的值。

for (var i = 0; i < $scope.labels.length; i++){
    var label = $scope.labels[i];
    calcParent(label);
}


function calcParent(label) {
    if (label.children != null) {
        for (var j = 0; j < label.children.length; j++) {
            if (label.children[j].data) {
                if (!label.data){
                    label.data = [];
                }
                for (var k = 0; k < label.children[j].data.length; k++) {
                    if (!label.data[k]) {
                        label.data[k] = 0;
                    }
                    label.data[k] += label.children[j].data[k];
                }
            } else {
                var parent = label.children[j];
                    calcParent(label.children[j]);
            }
        }
    }
}

我面临的问题是,它只对最后父母进行计算,以上所有父母都不会看到他们的孩子价值观,因为他们并不感谢然而。

我需要先将某些东西放在树上然后再次上升。我怎样才能做到这一点。

修改

所以我做了一个傻瓜:Plunker,但现在我失去了它......它适用于掠夺者。

为了给你一个想法,在我的应用程序&#34;活跃&#34;只计算&#34; vlottend actief&#34; &安培; &#34; bewegend actief&#34;和 not &#34;广大的暴力&#34;。

&#34;巨大的暴力&#34;只计算他的孩子&tereinen&#34;和&#34; gebouwen&#34;。

我刚刚复制了我的代码,所以它非常奇怪,它在plunker中工作。

0 个答案:

没有答案