IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Parcourir et comparer deux objets


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut Parcourir et comparer deux objets
    Bonjour,

    Je cherche à parcourir et comparer deux objets mais j'avoue ne pas savoir trop comment m'y prendre.

    En gros, suite à récupération de plusieurs JSON, je me retrouver avec 2 objets "object1" et object2"

    Dans chacun des ces objets, j'ai des propriétés qui peuvent être identiques ou différentes.

    Mon objectif est de parcourir "object1" et pour chacune de ces propriétés, si elle est présente dans "object2" l'afficher aussi puis ensuite afficher les propriétés de "objet2" qui ne sont pas présentes dans "objet1"

    Actuellement, j'utilise ceci pour afficher les propriété d'un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div ng-repeat="(key, value) in monFiltre(object1)">
    Mais du coup je pense pas que ce soit adapté à la comparaison.

    Comment feriez vous ?

    merci

  2. #2
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Salut!

    Je pense que ce n'est pas un problème lié à AngularJS. C'est plus un problème d'algo.
    Imagine que ce soit une boucle sur ta liste de propriétés (de l'objet 'object1'). A chaque itération, tu peux comparer l'élément en cours avec un des éléments des propriétés de 'object2'. Voila tout
    tu crée donc deux boucles imbriquées...

    Pour ton exemple, tu peux simplement faire une recherche sur les ng-repeat imbriqués ('nested ng-repeat').

    EDIT: Et j'ai vu qu'il existait déjà des posts sur ce sujet (ng-repeat). C'est, en effet, un sujet qui revient souvent.
    exemple : http://www.developpez.net/forums/d15...pement-d-item/
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par pop_up Voir le message
    Comment feriez vous ?

    merci
    Je ne ferais pas ça dans les templates. Je créerais en js un objet prêt à être bindé dans une vue mais toute la logique serait contenue dans un service en js qui retournerait le résultat final à binder.

    Cette réponse sur stackoverflow devrait t'y aider.

  4. #4
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Merci marco et slim pour vos réponses.

    Je pourrai effectivement faire un nouvel objet à binder en javascript mais ça me rajoutera du temps de traitement alors que j'ai déjà mes propriétés.

    N'y a t'il pas un moyen, lors du parcours d'un objet1, de regarder les propriété avec un nom identique de l'objet2 ?

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div ng-repeat="(key, value) in monFiltre(object1)">
            object1 - propriété {{key}} : {{value}} 
            object2 - propriété {{key}} : <span ng-if="object2.{{key}}">{{object2.{{key}}}}</span>
    </div>
    rigolez pas, c'est juste un code à la con qui marche pas mais qui donne l'idée de ce que j'aurai voulu faire

  5. #5
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    De rien.

    Ta démarche est mauvaise pour 2 raisons :

    1- On n'optimise jamais à priori. La bonne méthode c'est d'arriver au résultat voulu en respectant au maximum les bonnes pratiques, et ensuite seulement d'optimiser si on constate un problème de performance.

    2- Afin d'optimiser le temps de traitement javascript alors même que tu ne sais pas si il existe un besoin, tu vas violer une bonne pratique majeure qui est de ne pas écrire de logique ni de traitement dans un template.

    Les conséquences ?
    Tu dégrades la qualité du code source de l'application pour augmenter la qualité d'exécution et ce sans aucune information permettant d'affirmer qu'il y a un besoin.
    Donc d'un point de vue budget tu vas passer du temps à réaliser une tâche qui ne repose sur aucun besoin et le résultat final sera d'augmenter les couts de maintenance pour quel gain ?

    Au final, le traitement de modification du modèle devrait être exécuté dans un service quelque part entre le moment où tu récupères les data sur le réseau et le moment où tu bind dans le controller le modèle à afficher.

  6. #6
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Ok, tu m'as convaincu

    En plus ça sera plus facile de faire ça dans un service.

  7. #7
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Encore une petite question ...

    J'ai fait mon service de comparaison -> OK
    J'ai mon objet à binder avec mes valeurs initiale et le résultat de ma comparaison -> OK

    Par contre, ces objets sont récupérés à l'aide de promises et peuvent changer suivant certains choix dans la page.

    Actuellement,t, j'ai codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $scope.$watch('[objet1,objet2]', function () { // Appel à mon service ... }, true);
    par contre, ça exécute deux fois ma fonction quand les deux éléments changent.
    Je laisse ce comportement ou alors il y a une astuce pour ne passer qu'une seule fois la dedans ?

    merci en tout cas, ça fonctionne bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Comparer deux objets dans une liste
    Par lerieure dans le forum C#
    Réponses: 4
    Dernier message: 10/12/2012, 20h03
  2. Comparer deux objets
    Par adrienfehr dans le forum C#
    Réponses: 3
    Dernier message: 14/10/2008, 09h19
  3. Souci pour comparer deux objets avec equals()
    Par xillibit dans le forum Langage
    Réponses: 7
    Dernier message: 30/09/2007, 15h41
  4. comparer deux objets
    Par root76 dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2007, 10h34
  5. comparer deux objets pas si simple ?
    Par StIcK dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2006, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo