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

JavaScript Discussion :

[ES6] Tri dans un tabeau d'objet, besoin de propreté


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut [ES6] Tri dans un tabeau d'objet, besoin de propreté
    Bonjour à tous,

    J'ai un tableau d'objet dont j'aimerais éliminer les doublons.

    Voici la classe en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Client {
       constructor(obj) {
          this.m_lId = obj.m_lId || -1;
       }
     
       get id() { return this.m_lId; }
    }
    Le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    let arr = [];
    arr.push(new Client({m_lId:1}));
    arr.push(new Client({m_lId:2}));
    arr.push(new Client({m_lId:2}));
    Le but du jeu est d'éliminer les doublons pour que le tableau arr ne contienne plus que deux client (une instance identifiée 1, et l'autre identifiée 2).

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    let uniqueArr = [];
    arr.filter((elem) => {
       let found = uniqueArr.find((elemFind) => {
          return elemFind.id === elem.id
       });
       if(found != undefined)
          return false;
       uniqueArr.push(elem);
       return true;
     });
    Ça fonctionne mais ça ne me semble pas super super propre et je me dis qu'il doit forcément il y avoir un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    arr = arr.formuleMagique((...) => ...);
    L'idéal aurait été de pouvoir définir un opérateur "==" dans la classe pour pouvoir comparer deux instances comme on peut le faire en C++ mais je n'ai pas trouvé ce genre de possibilité

    Auriez-vous une idée pour rendre ce code plus concis et plus propre ?

    Merci à vous,

    A bientôt

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Finalement j'ai trouvé mon bonheur via lodash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arr = _.uniqBy(arr, 'id');

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class Client {
      constructor( obj ){
        this.m_lId = obj.m_lId || -1;
      }
      get id(){
        return this.m_lId;
      }
    }
     
    const arrClient = [];
     
    arrClient.push( new Client( { m_lId : 1 } ) );
    arrClient.push( new Client( { m_lId : 2 } ) );
    arrClient.push( new Client( { m_lId : 2 } ) );
     
    const filterArrClient = () => {
      let id = -2;
     
      arrClient.filter( o => {
        if ( id != o.id ){
          id = o.id;
          return true;
        }
      });
    };
     
    console.table( filterArrClient() );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  2. Tri dans une DBGrid sur un champ date au format jj/mm
    Par Jeankiki dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/10/2004, 12h32
  3. Retour chariot dans l'inspecteur d'objet
    Par All Jinx dans le forum Composants VCL
    Réponses: 3
    Dernier message: 20/10/2004, 01h28
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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