2016-08-08 4 views
1

Wie schiebe ich Objekte mit demselben Schlüsselnamen in ein Array mit angular.forEach() Funktion?Push-Objekte (gleiche Schlüsselnamen) im Array mit angular.forEach()

zum Beispiel erkläre ich ein leeres Array dh $scope.arr = [] und ein leeres Objekt dh $scope.obj = {}

Jetzt angular.forEach() und push() Funktion, wie kann ich folgendes Ergebnis:

$ scope.arr = [{msg: ''}, {msg: 'please, enter no.'}, {msg: ''}]

meine JS-Code

$scope.arr = [] 
$scope.obj = {} 
     angular.forEach(['12', 'Please, enter no.', '43'], function (value, index) { 
      if (isNaN (value)) { 
       $scope.obj['msg'] = 'Please, enter no.'; 
       $scope.arr.push($scope.obj); 
      } 
      else { 
       $scope.obj['msg'] = ''; 
       $scope.arr.push($scope.obj); 
      } 
     }); 

Aktuelle falsche Ausgabe:$scope.arr = [{msg: 'please, enter no.'}, {msg: 'please, enter no.'}, {msg: 'please, enter no.'}]

Erwartete Ausgabe:$scope.arr = [{msg: ''}, {msg: 'please, enter no.'}, {msg: ''}]

ich wusste, warum ich falsch Ausgang bekam, weil alle msg Schlüssel aktualisiert werden mit dem letzten Wert von array, aber ich konnte nicht finden das Heilmittel dafür.

Bitte, hilf mir .....

Antwort

1

Warum erstellen $scope Objekt? Wie Sie herausgefunden haben, wird dies immer die gleiche Objektreferenz zu Ihrem Array hinzufügen. Wie wäre es:

angular.forEach(['12', '43', 'Please, enter no.'], function (value, index) { 
    if (isNaN (value)) { 
     $scope.arr.push({ msg: 'Please, enter no.' }); 
    } 
    else { 
     $scope.arr.push({ msg: '' }); 
    } 
}); 
+0

Lex: Dank yaar (bedeutet Freund in der indischen Sprache) .. netter Trick. Es klappt. –

0

Nun, ich Grund habe zu falschen Ausgang des obigen Code ist, dass ich() Funktion zu Unrecht $scope.obj = {} außerhalb des angular.forEach erklärt, aber es sollte in ihm deklariert werden. Auf diese Weise wird bei jeder Iteration jedes Mal ein neues Objekt erstellt.

Korrigierte JS-Code:

$scope.arr = [] 
angular.forEach(['12', 'Please, enter no.', '43'], function (value, index) { 
      $scope.obj = {} 
      if (isNaN (value)) { 
       $scope.obj['msg'] = 'Please, enter no.'; 
       $scope.arr.push($scope.obj); 
      } 
      else { 
       $scope.obj['msg'] = ''; 
       $scope.arr.push($scope.obj); 
      } 
     }); 
+0

Warum erstellen Sie es überhaupt als Scope-Objekt? Es ist wahrscheinlich besser, diesen Teil einfach wegzulassen, da er keine zusätzliche Funktionalität bereitstellt, sondern das Objekt während jeder Iteration im Gültigkeitsbereich des Bereichs registriert. –

Verwandte Themen