2017-09-15 3 views
3

Unten ist mein Beispielcode, der in VacanciesWithSavedSearches-Array durch Überprüfung überprüft, ob das Element nicht bereits vorhanden ist.überprüfen, ob Eigenschaftswert vorhanden ist, bevor Push-Element

if ($scope.VacanciesWithSavedSearches.indexOf(value) == -1) { 

      $scope.VacanciesWithSavedSearches.push({ 
       type: "Saved Searches", 
       title: value.title, 
       value: value.id 
      }); 
     } 

Wie kann ich die oben ändern, indem indexOf mit dem tatsächlich Eigenschaftswert zu ersetzen, zB Element in der Liste VacanciesWithSavedSearches hinzufügen, wenn die Liste keine andere item.id enthält = 123

+2

Sind Sie sicher, dass Sie ein Array für 'VacanciesWithSavedSearches' benötigen? Wenn Sie nach einer eindeutigen ID suchen, erscheint ein Objekt oder eine Karte besser. – spanky

Antwort

0

Verwendung Array.filter

var result = $scope.VacanciesWithSavedSearches.filter(t=t.id ==='123'); 
if(result.length === 0) 
{ 
    $scope.VacanciesWithSavedSearches.push({ 
    type: "Saved Searches", 
    title: value.title, 
    value: value.id 
    });   

} 
1

können Sie array.some verwenden:

Wenn Ecmascript6 kein Problem:

var id = 123; 
if (!$scope.VacanciesWithSavedSearches.some(vac => vac.id === id)) { 
    $scope.VacanciesWithSavedSearches.push({ 
     type: "Saved Searches", 
     title: value.title, 
     value: id 
    }); 
} 

Mit ECMAScript5, können Sie es wie unten tun:

var id = 123; 
if (!$scope.VacanciesWithSavedSearches.some(function(vac) { return vac.id === id; })) { 
    $scope.VacanciesWithSavedSearches.push({ 
     type: "Saved Searches", 
     title: value.title, 
     value: id 
    }); 
} 
+0

Danke @cale_b, ich habe die Antwort aktualisiert – Faly

0

Wenn Ihr Array war eine Reihe von Zahlen oder Primitive Sie .indexOf(value) == -1 tun könnte, aber es ist ein Array von Objekten, so dass Sie es nicht testen können, mit .indexOf() Methode, können Sie .some() Methode verwenden, um über die Existenz Ihres Objekts im Array zu testen.

Die Methode some() testet, ob mindestens ein Element im Array den von der angegebenen Funktion implementierten Test besteht.

Dies ist, wie Ihr Code sein sollte:

if (!$scope.VacanciesWithSavedSearches.some(function(v){return v.value.id === -1})) { 
    $scope.VacanciesWithSavedSearches.push({ 
      type: "Saved Searches", 
      title: value.title, 
      value: value.id 
    }); 
} 
Verwandte Themen