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

cette question a déjà une réponse ici:

  • Comment vérifier si un tableau inclut un objet en JavaScript? 41 réponses

J'utilise actuellement la méthode forEach() pour vérifier la nouvelle valeur avec le tableau des objets. Mais c'est une mauvaise approche parce que par exemple dans la liste sont les objets 20. Quand je crée un objet avec un article existant alors la déclaration if-in forEach indique une fois l'article est existant et 19 fois il ne l'est pas.

le code suivant:

var list = [];

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

$log.info(list);

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

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

le problème, c'est cette liste.artNr me renvoie "undefined" parce que la variable list est un tableau:

liste sortie en console = > Array ["AB001", "AB002", "AB003", "AB004"] ,

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

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

41
demandé sur yuro 2015-09-16 16:39:37

3 réponses

vous pouvez utiliser la fonction indexOf .

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

plus d'informations sur indexOf:

101
répondu Juha Tauriainen 2015-09-16 13:44:53

vous pouvez utiliser indexOf () . Comme:

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

la méthode indexOf () recherche le tableau pour l'article spécifié, et renvoie sa position. Et retourner -1 si l'article n'est pas trouvé.


si vous voulez rechercher de bout en bout, utilisez le latindexof () méthode:

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

15
répondu Muhammad Awais 2016-05-18 11:50:37

vous pouvez 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
répondu Taran 2016-06-21 15:23:52