2016-03-22 11 views
0

dies sei angenommen, ist es, einige Daten, die ich in meinem AngularJS Ansicht (Niederländisch Sprache) veröffentlichen möchten:berechnen Kind Objektwerte und zeigen auf Mutter

$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 
       } 
      ] 
     } 
    ]; 

Um dieses Objekt in einer Liste auf meiner Ansicht zu veröffentlichen ich tun kann, so etwas wie dieses:

<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> 

ich möchte, dass meine Eltern-Objekt {{ item name }} ein Array mit der Summe der Kinder haben, zB der erste Elternteil dieses Array haben würde: [369, 395, 421, 687]

Ich habe versucht, diese Berechnung in meinem Controller zu tun (ich weiß, keine Logik in der Steuerung, aber es ist nur zum Testen)

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??? 
      } 
     } 
    } 
} 

Es gibt 4 Positionen in meinem Elternwert-Array, aber alle von ihnen sind NaN, was mache ich falsch?

Side Frage:

, weil ich die Looping meiner Meinung nach tun, ist nicht, dass es ein kürzerer Weg, um die Summen der Feldposition dort zu berechnen?

Antwort

0

Diese Syntax

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

geht davon aus, dass es bereits ein Wert in dem k Position des Array zu inkrementieren.

In Ihrem Code ist das Array zunächst leer. Was geschieht, ist so etwas wie dieses:

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

Eine Möglichkeit, dieses Problem zu lösen, ist das leere Array mit Nullwerten zu initialisieren:

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

Sind Sie sicher? denn wenn ich 'var myArray = []; myArray + = 5' ich bekomme nur '5'. Aber wenn ich 'var myArray = []; meinArray + = 5; myArray + = 10' Ich bekomme '510'. Was ich sehe, ist, dass es die Zahlen nicht zählt, sondern sie beschlagnahmt. – Peter

+1

Von meinem Verständnis Ihrer Frage aus, was Sie tun möchten, ist ein Wert im Array zu erhöhen, die die Syntax 'myArray [index] + = Wert 'hat. Wenn Sie also 'var myArray = [1,2,3]' haben und dem ersten Element '5' hinzufügen wollen, würden Sie' myArray [0] + = 5' machen. Beachten Sie die Verwendung des Index '0'. Die Syntax ohne den Index ('myArray + = 5') ist in diesem Fall nicht das, wonach Sie suchen. –

+0

Sie haben Recht, und ich habe gewartet, bis ich meine vorherige Antwort bearbeiten konnte, weil ich das bemerkt habe! Wir werden es schaffen, vielen Dank! – Peter

Verwandte Themen