2015-09-16 27 views
33

Momentan verwende ich die forEach() -Methode von angular, um den neuen Wert mit dem Array von Objekten zu überprüfen. Aber das ist der falsche Ansatz, weil zum Beispiel in der Liste 20 Objekte sind. Wenn ich ein Objekt mit einem vorhandenen Artikel erstelle, sagt die if-Anweisung in forEach einmal aus, dass der Artikel existiert und 19 mal nicht.Prüfen, ob ein Wert im Array vorhanden ist (AngularJS)

Der folgende Code:

var list = []; 

articlelist.forEach(function (val) { 
    list.push(val.artNr); 
}); 

$log.info(list); 

Die articlelist enthält alle 20 Objekte. Zum Vergleich brauche ich nur die artNr. Denn wenn der Benutzer einen neuen Artikel erstellt, sollte es eine if-Anweisung sein, um zu überprüfen, ob die hinzugefügte artNr bereits existiert.

$scope.createItem = function (createItem) { 
    if(list.artNr === createItem.artNr) { 
     $scope.message = 'artNr already exists!'; 
    } 
... 
}; 

Das Problem ist, dass list.artNr gibt mir "undefiniert", weil die Liste Variable ist ein Array:

Listenausgabe in der Konsole =>Array ["AB001", "AB002", "AB003", "AB004"],

createItem Ausgang: = >Object { artNr: "AB001", description: "New Article" ...}

Wie kann ich das neu erstellte Objekt mit dem Array aus der Listenvariablen vergleichen?

+0

'indexOf' Methode nicht für mich arbeiten, wie ich json Objektarray aus dem lokalen Speicher abgerufen wurde mit.Nachdem ich viele verschiedene Methoden ausprobiert habe, habe ich mich entschieden, den in AngularJS verfügbaren $ Filter Provider zu verwenden. 'var artikelliste = [{id: 1, titel: 'Titel1'}, {id: 2, titel: 'Titel2'}, {id: 3, titel: 'Titel3'}]' 'var o = $ filter ('filter') (Artikelliste, {'id': new_title.id}, true); ' ' if (o.length == 0) {' ' Artikelliste .push (neues_Artikel); ' '} ' –

Antwort

11

Sie können indexOf() verwenden. Wie:

var Color = ["blue", "black", "brown", "gold"]; 
var a = Color.indexOf("brown"); 
alert(a); 

Die indexOf() Methode das Array für das angegebene Element sucht, und gibt seine Position. Und geben Sie -1 zurück, wenn der Artikel nicht gefunden wird.


Wenn Sie von Ende suchen beginnen soll, verwenden Sie die lastIndexOf() Methode: Ende

var Color = ["blue", "black", "brown", "gold"]; 
    var a = Color.lastIndexOf("brown"); 
    alert(a); 

Die Suche an der angegebenen Position beginnt, oder an, wenn keine Startposition wird angegeben und beendet die Suche am Anfang des Arrays.

Gibt -1 zurück, wenn der Artikel nicht gefunden wird.

0

U so etwas wie diese verwenden kann ....

function (field,value) { 

     var newItemOrder= value; 
      // Make sure user hasnt already added this item 
     angular.forEach(arr, function(item) { 
      if (newItemOrder == item.value) { 
       arr.splice(arr.pop(item)); 

      } }); 

     submitFields.push({"field":field,"value":value}); 
    }; 
+1

Dies ist ein schrecklicher Weg, es zu tun ... Denken Sie an eine kleine Liste von 100 Datensätzen, die doppelte Datensätze enthält. Für jeden Datensatz werden Sie die hinzugefügten Datensätze durchlaufen – curiousBoy

Verwandte Themen