web-dev-qa-db-fra.com

Vérifier si la valeur existe dans le tableau (AngularJS)

J'utilise actuellement la méthode forEach()- d'angular pour vérifier la nouvelle valeur avec le tableau d'objets. Mais ce n'est pas la bonne approche car par exemple, dans la liste, il y a 20 objets. Lorsque je crée un objet avec un article existant, l'instruction if de forEach indique une fois que l'article existe et 19 fois qu'il n'en est pas un.

Le code suivant:

var list = [];

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

$log.info(list);

La articlelist contient les 20 objets. Pour comparer, je n'ai besoin que de la variable artNr. Parce que lorsque l'utilisateur crée un nouvel article, alors devrait être un if-Statement pour vérifier si le artNr ajouté existe déjà.

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

Le problème est que list.artNr me renvoie "indéfini" car la variable de liste est un tableau:

list output dans console => Array ["AB001", "AB002", "AB003", "AB004"],

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

Comment puis-je comparer le nouvel objet créé avec le tableau de la variable de liste?

43
yuro

Vous pouvez utiliser la fonction indexOf.

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

En savoir plus sur indexOf:

108
Juha Tauriainen

Vous pouvez utiliser indexOf () . Comme:

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

La méthodeindexOf ()recherche le tableau pour l'élément spécifié et renvoie sa position. Et retourne -1 si l’article n’est pas trouvé.


Si vous souhaitez effectuer une recherche de bout en bout, utilisez la méthode lastIndexOf () :

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

La recherche commencera à la position spécifiée ou à la fin si aucune position de départ n’est spécifiée, et terminera la recherche au début du tableau.

Renvoie -1 si l'élément n'est pas trouvé.

18
Muhammad Awais

U peut utiliser quelque chose comme ça ....

  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