2017-09-19 5 views
0

J'utilise les éléments suivants pour vérifier les valeurs en double dans un tableau avant d'ajouter une valeur:AngularJS - Ajout d'une nouvelle propriété à l'article donne des valeurs dulpcate à l'aide .indexOf

vm.onGridItemChanged = function (resource) { 

    if (vm.modifiedItems.indexOf(resource) === -1) { 
     vm.modifiedItems.push(resource); 
    } 
}; 

Cela fonctionne très bien et me donne le comportement que je vouloir. Cependant, j'ai maintenant besoin d'ajouter EnglishValue aussi, donc je l'ai changé:

vm.onGridItemChanged = function (resource, englishText) { 

     var modifiedItem = {Resource: resource, EnglishValue: englishText}; 

     if (vm.modifiedItems.indexOf(modifiedItem) === -1) { 
      vm.modifiedItems.push(modifiedItem); 
     } 

    }; 

Cependant, cette fonctionnalité et la casse, je reçois maintenant des valeurs en double? Pourquoi cela serait-il le cas?

Modifier - mon josn comprend $$hashKey valeurs qui est à l'origine des problèmes encore en double:

[ 
    { 
    "Resource": { 
     "ResourceId": "Account_AccountVerified_Success_Title", 
     "LocaleId": "de", 
     "ResourceSet": "/WebResources", 
     "Value": "Erfolg55", 
     "Comment": "Success", 
     "Editing": false, 
     "$$hashKey": "object:3861" 
    }, 
    "EnglishValue": "Success", 
    "$$hashKey": "object:40483" 
    }, 
    { 
    "Resource": { 
     "ResourceId": "Account_AccountVerified_Success_Title", 
     "LocaleId": "de", 
     "ResourceSet": "/WebResources", 
     "Value": "Erfolg55", 
     "Comment": "Success", 
     "Editing": false, 
     "$$hashKey": "object:3861" 
    }, 
    "EnglishValue": "Success", 
    "$$hashKey": "object:40488" 
    } 
] 

Répondre

1

Vous devez convertir l'objet JSON en chaîne et vérifier son index. Depuis, vous avez $$hashkey dans votre objet, vous devez d'abord enlever que par angular.toJson

vm.onGridItemChanged = function (resource, englishText) { 

     var modifiedItem = {Resource: resource, EnglishValue: englishText}; 
     var modifiedItems = angular.toJson(vm.modifiedItems); 
     if (JSON.stringify(modifiedItems).indexOf(JSON.stringify(modifiedItem)) === -1) { 
      vm.modifiedItems.push(modifiedItem); 
     } 

    }; 

var a = [{'d':'dasdasd','e':'dasdasda'}, {'d':'dasdasd','e':'dada'}]; 
 
var b = {'d':'dasdasd','e':'dasdasda'}; 
 

 
var index = JSON.stringify(a).indexOf(JSON.stringify(b)); 
 

 
console.log(index);

voir que nous obtenons l'indice de l'objet JSON qui existent dans la chaîne. De même, l'index sera -1 s'il n'est pas présent sur le tableau JSON.

+0

Salut, désolé de ne pas travailler avec mes données - voir la question mise à jour. –

+0

Je vois que '$$ hashkey'. Vérifiez la réponse mise à jour –

+0

J'ai utilisé 'si (angular.toJson (vm.modifiedItems) .indexOf (angular.toJson (modifiedItem)) === -1)' et de travail :) –