计算子对象值并在父级上显示

时间:2016-03-22 10:12:06

标签: arrays angularjs

假设这是我想在AngularJS视图(荷兰语)中发布的一些数据:

    $scope.data =
    [
        {
            name: "actief",
            value: null,
            children:
            [
                {
                    name: "vast actief",
                    value: [20, 30, 40, 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
                }
            ]
        }
    ];

要在我的视图的列表中发布此对象,我可以执行以下操作:

<ul ng-repeat="item in data">
    <li>{{item.name}}</li>
    <ul ng-repeat="child in item.children">
        <li>{{ child.name }}</li>
        <ul ng-repeat="value in child.value">
            <li>{{ value }}</li>
        </ul>
    </ul>
</ul>

我希望我的父对象{{ item name }}有一个包含子项总和的数组,例如:第一个父级将拥有此数组:[369, 395, 421, 687]

我试图在我的控制器内进行此计算(我知道,控制器中没有逻辑,但仅用于测试)

for (var i = 0; i < $scope.data.length; i++){
    $scope.data[i].value = [];
    for (var j = 0; j < $scope.data[i].children.length; j++) {
        if ($scope.data[i].children[j].value.length > 0) {
            for (var k = 0; k < $scope.data[i].children[j].value.length; k++) {
                console.log(typeof $scope.data[i].children[j].value[k]); // says number!
                $scope.data[i].value[k] += $scope.data[i].children[j].value[k]; // But my array is NAN???
            }
        }
    }
}

我的父值数组中有4个位置,但其中有NaN,我做错了什么?

旁边问题

因为我在我的视图中进行循环,是不是有更短的方法来计算那里的数组位置的总数?

1 个答案:

答案 0 :(得分:0)

此语法

$scope.data[i].value[k] += ... // some value

假设数组的k位置已经有一个值要递增。

在您的代码中,数组最初为空。发生的事情是这样的:

var myArray = [];
myArray[0] += 1; // error: there is no element at the 0 position!

解决此问题的一种方法是使用零值初始化空数组:

$scope.data[i].value = [0, 0, 0, 0]; // you can also seed the initial zeroes using a loop