Vérifier si l'objet est dans AngularJS tableau qui est dans localStorage
J'ai cette angularjs tableau: $scope.fav = []
où les éléments (objets) sont ajoutés avec elle sur un appel de fonction. un exemple de ces objets sont {quote: "Some text", controller: some_controller}
Quand j'ajoute un nouvel objet dans le tableau, le tableau est enregistré dans localstorage. Le tableau fonctionne exactement de la façon dont je le veux, sauf lorsque j'essaie d'imprimer dans la console.log (), je reçois de nombreux [object, object], dont j'ai supposé que la façon dont il est imprimé. Ce n'est pas le principal problème, mais parce que le tableau fonctionne, comment il en a besoin.
La question que je vais avoir est d'essayer de trouver si un objet est déjà dans un tableau. J'ai essayé
if ($scope.fav.indexOf({quote: q, controller: c}) == -1)
et cela ne semble pas fonctionner, car chaque objet va en était l'indice -1 même si elle était déjà dans le tableau. Je présume que c'est parce qu'il n'est pas de la lecture de l'objet correctement.
Enfin j'ai recours à cette fonction:
$scope.containsObject = function(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i] === obj) {
return true;
}
}
return false;
}
qui vérifie si l'objet est dans le tableau. Voici comment je l'appelle:
$scope.addToFav = function(q, c) {
$scope.value = $scope.containsObject({quote: q, controller: c}, $scope.fav)
console.log($scope.value);
}
Je reçois une valeur négative pour la somme de portée.de la valeur même si l'objet est dans le tableau.
Désolé pour le long compliquer explication.
Je vous remercie pour votre compréhension,
Ben
Vous devez vous connecter pour publier un commentaire.
Array.indexOf()
et la===
opérateur de comparer les références de l'objet et ne sont vrai lorsque l'on compare les références à la même instance d'un objet.{quote: q, controller: c}
est une toute autre instance de l'objet que dans le tableau, même si ses propriétés d'un objet dans le tableau exactement.Angulaire a une fonction d'assistance appelé
angular.equals()
qui vérifie la présence de 2 objets sont équivalents. Vous pouvez l'utiliser à la place de la===
...Chaque fois que vous êtes à la récupération d'un objet à partir d'un stockage local, vous êtes en fait la création d'un nouvel objet, probablement à l'aide de JSON.décoder, de convertir la chaîne de données stockées dans le stockage local, dans un objet.
Même si le nouvel objet contient les mêmes données, il ne pourra pas l'essai strict
===
(et en effet, le lâche==
) par rapport à l'existant (quoique apparemment identiques) de l'objet.indexOf
utilise l'opérateur d'égalité stricte===
donc, ce serait se comporter de la même manière.Si vous avez besoin d'un code pour tester si un objet est égale à une autre, puis de l'appliquer sur une liste. Une façon est d'utiliser une combinaison de
angulaire.égal à
, qui effectue une comparaison en profondeur des objets, etfiltre
:La
filter
fonction je ne crois pas partie de IE8. Si vous avez besoin d'IE8 pris en charge, vous pouvez utiliser le polyfill, ou utiliser une autre bibliothèque, comme lo tableau de bord