Предположим, что это некоторые данные, которые я хочу опубликовать в своем представлении 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
, что я делаю неправильно?
Боковой вопрос:
потому что я делаю цикл, на мой взгляд, нет ли более короткого способа подсчета итогов позиции массива?
Этот синтаксис
$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
var myArray = []; myArray += 5
я просто получаю5
. Но когда я делаюvar myArray = []; myArray += 5; myArray += 10
я получаю510
. То, что я вижу, - то, что это не считает числа, а согласовывает их.myArray[index] += value
. Поэтому, если у вас естьvar myArray = [1,2,3]
и вы хотите добавить5
к первому элементу, вы должны выполнитьmyArray[0] += 5
. Обратите внимание на использование индекса0
. Синтаксис без индекса (myArray += 5
) - это не то, что вы ищете в этом случае.