Supprimer les doublons des tableaux est une tâche courante en JavaScript. Voici plusieurs méthodes efficaces pour y parvenir.
Méthode 1 : Utiliser Set (Recommandé)
La manière la plus simple et performante de supprimer les doublons est d'utiliser un Set :
Avantages :
- Propre et concis
- Bonne performance O(n)
- Fonctionne avec les valeurs primitives
Inconvénients :
- Ne fonctionne qu'avec les valeurs primitives (nombres, chaînes de caractères, booléens)
- Les objets sont comparés par référence
Méthode 2 : Utiliser Filter
Pour des scénarios plus complexes ou lorsque vous souhaitez conserver la première occurrence :
Avantages :
- Plus flexible pour une logique personnalisée
- Facile à comprendre
Inconvénients :
- Moins performant O(n²) en raison de
indexOf
Méthode 3 : Utiliser Reduce
Une approche fonctionnelle utilisant reduce :
Avantages :
- Style de programmation fonctionnelle
- Peut être combiné avec d'autres transformations
Inconvénients :
- Moins performant en raison de
includes - Plus verbeux
Méthode 4 : Pour les objets (Utiliser Map)
Lorsque vous travaillez avec des objets, vous devez comparer par une propriété spécifique :
Avantages :
- Fonctionne avec les objets
- Peut spécifier quelle propriété utiliser pour l'unicité
- Bonne performance
Inconvénients :
- Syntaxe plus complexe
- Conserve la dernière occurrence (peut être modifié pour conserver la première)
Comparaison des performances
Pour les grands tableaux (10 000+ éléments) :
- Set : ~1 ms (le plus rapide)
- Map (pour les objets) : ~2 ms
- Reduce : ~50 ms
- Filter : ~100 ms (le plus lent)
Recommandation
- Utilisez Set pour les valeurs primitives (nombres, chaînes de caractères, booléens)
- Utilisez Map pour les objets lorsque vous devez supprimer les doublons par une propriété spécifique
- Utilisez Filter ou Reduce uniquement lorsque vous avez besoin d'une logique personnalisée ou travaillez avec de petits tableaux
Remarque : Toutes ces méthodes créent un nouveau tableau. Si vous devez modifier le tableau original directement, vous aurez besoin d'une approche différente.