it-swarm.com.de

Überprüfen Sie, ob ein Wert im Array vorhanden ist (AngularJS)

Derzeit verwende ich die forEach()- Methode von angle, um den neuen Wert mit dem Array von Objekten zu überprüfen. Dies ist jedoch der falsche Ansatz, weil sich zum Beispiel 20 Objekte in der Liste befinden. Wenn ich ein Objekt mit einem vorhandenen Artikel erstelle, sagt die if-Anweisung in forEach einmal, dass der Artikel vorhanden ist und 19 mal nicht.

Der folgende Code:

var list = [];

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

$log.info(list);

Der articlelist enthält alle 20 Objekte. Zum Vergleich benötige ich nur den artNr. Denn wenn der Benutzer einen neuen Artikel erstellt, sollte er mit einer if-Anweisung prü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 mich "undefined" zurückgibt, weil die Listenvariable ein Array ist:

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

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

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

43
yuro

Sie können die Funktion indexOf verwenden.

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

Mehr über indexOf:

108
Juha Tauriainen

Sie können indexOf () verwenden. Mögen:

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

Die MethodeindexOf ()durchsucht das Array nach dem angegebenen Element und gibt seine Position zurück. Und zurück -1 wenn der Artikel nicht gefunden wird.


Wenn Sie von Anfang bis Ende suchen möchten, verwenden Sie die Methode lastIndexOf () :

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

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

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

18
Muhammad Awais

Sie können so etwas verwenden ....

  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
Taran