J'ai une collection d'objets renvoyés d'une requête REST. Angular renseigne automatiquement chaque élément avec un $$hashKey
. Le problème est que lorsque je recherche un objet dans ce tableau sans le $$hashKey
, il renvoie -1. C'est logique. Malheureusement, je n'ai pas connaissance de la valeur de $$hashKey
.
Existe-t-il un moyen plus efficace de rechercher un objet dans une collection d'objets renvoyé d'une demande REST dans AngularJS sans supprimer la propriété $$hashKey
?
function arrayObjectIndexOf(arr, obj) {
var regex = /,?"\$\$hashKey":".*?",?/;
var search = JSON.stringify(obj).replace(regex, '');
console.log(search);
for ( var i = 0, k = arr.length; i < k; i++ ){
if (JSON.stringify(arr[i]).replace(regex, '') == search) {
return i;
}
};
return -1;
};
angular.equals()
effectue une comparaison approfondie des objets sans les propriétés préfixées $
...
function arrayObjectIndexOf(arr, obj){
for(var i = 0; i < arr.length; i++){
if(angular.equals(arr[i], obj)){
return i;
}
};
return -1;
}
Puisque c'est angulaire, pourquoi ne pas utiliser le filtrage:
$ filter ('filter') (pages, {id: pageId}, true);
où pages est le tableau et id est la propriété de l'objet que vous voulez faire correspondre et pageId est la valeur que vous correspondez.
Ok, donc c'est un peu moche, mais c'est la solution la plus simple:
function arrayObjectIndexOf(arr, obj) {
JSON.parse(angular.toJson(arr)).indexOf(obj)
}
Le bit angular.toJson
supprime tous les attributs précédés d'un $. Vous voudrez peut-être simplement stocker cet objet propre dans un lieu de recherche. Alternativement, vous pouvez écrire vos propres trucs de comparaison, mais ce n'est rien.
Utilisez lodash's find, where, filtrez pour manipuler les collections, vérifiez docs http://lodash.com/docs