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