Je ne veux pas pousser les valeurs en double dans selectedOwners, donc dans le code ci-dessous, l'utilisateur sélectionne le propriétaire si le propriétaire existait déjà dans le tableau selectedOwners je ne veux pas pousser, comment puis-je vérifier cela pour éviter les valeurs en double dans un tableau?

Ctrl.js

  var selectedOwners = [];
            $scope.addProcessOwner = function(dataItem){
              var selectedOwner = {
                  fullName: dataItem.fullName,
                  workerKey: dataItem.workerKey
              }
              if(selectedOwners.indexOf(selectedOwner) !== -1) {
                selectedOwners.push(selectedOwner);
               }
              console.log('WORKER DATA',selectedOwners);
            }
0
hussain 8 mars 2016 à 22:19

3 réponses

Meilleure réponse

Vous pouvez utiliser Array.prototype.some méthode

La méthode some () teste si un élément du tableau passe le test implémenté par la fonction fournie.

var isExists = function(e) {
    if (e.fullName == selectedOwner.fullName
        && e.workerKey == selectedOwner.workerKey) {
        return true;
    }
}

if (!selectedOwners.some(isExists)) {
    selectedOwners.push(selectedOwner);
}
1
isvforall 8 mars 2016 à 19:38

L'utilisation de Array.indexOf est évidente pour les types simples comme les chaînes et les nombres.

Cependant, lorsque vous recherchez un objet, vous devez passer exactement le même objet. Un objet différent avec les mêmes propriétés et valeurs ne fonctionnera toujours pas. Considérez le tableau comme contenant des pointeurs vers les objets et vous devez rechercher le même pointeur.

Au lieu de cela, vous devrez écrire votre propre méthode pour comparer les propriétaires pour l'égalité et parcourir le tableau en faisant cette vérification.

1
Comptonburger 8 mars 2016 à 19:24

Essayez d'encapsuler votre logique "if" dans une boucle for.

Exemple

// Le code suivant parcourt le tableau et vérifie la valeur déjà existante

for(var i = 0; i < selectedOwners.length; i++){
if(selectedOwners.indexOf(selectedOwner) !== -1) {
                selectedOwners.push(selectedOwner);
               }
}
0
KpTheConstructor 8 mars 2016 à 19:30