web-dev-qa-db-fra.com

Comment obtenir l'indexOf d'un objet dans une collection d'objets de réponse AngularJS?

Cas d'utilisation

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.

Question

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?

Code

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;
};
10
Pete

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;
}
21
Anthony Chu

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.

5
MrWiLofDoom

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.

1
Tim Brown

Utilisez lodash's find, where, filtrez pour manipuler les collections, vérifiez docs http://lodash.com/docs

0
Issam Zoli