Je crois qu'une combinaison de reduce
avec JSON.stringify
à parfaitement comparer les objets et sélectivement L'ajout de ceux qui ne sont pas déjà dans l'accumulateur est un moyen élégant.
Gardez à l'esprit que JSON.stringify
peut devenir un problème de performance dans les cas extrêmes où la matrice a beaucoup de Objets et ils sont complexes, MAIS pour la majorité du temps C'est le chemin le plus court, à mon avis.
var collection= [{a:1},{a:2},{a:1},{a:3}]
var filtered = collection.reduce((filtered, item) => {
if( !filtered.some(filteredItem => JSON.stringify(filteredItem) == JSON.stringify(item)) )
filtered.push(item)
return filtered
}, [])
console.log(filtered)
Une autre façon d'écrire la même chose (mais moins efficace) :
collection.reduce((filtered, item) =>
filtered.some(filteredItem =>
JSON.stringify(filteredItem ) == JSON.stringify(item))
? filtered
: [...filtered, item]
, [])
0 votes
Voulez-vous dire comment empêcher qu'une table de hachage/un objet avec tous les mêmes paramètres soit ajouté à un tableau ?
9 votes
Mathew -> S'il est plus simple d'empêcher un objet en double d'être ajouté au tableau en premier lieu, au lieu de le filtrer plus tard, oui, ce serait bien aussi.
18 votes
Je suis toujours surpris de voir comment les gens nomment leurs variables. Parfois, je pense qu'ils veulent vraiment rendre les choses inutilement compliquées. La prochaine étape sera
aaaaa.aaaa.push(...)
:)2 votes
Downmodded pour
things.thing
. Cela complique inutilement la question et la réponse.0 votes
Des réponses super longues et pourtant MDN a probablement les réponses les plus courtes :
arrayWithNoDuplicates = Array.from(new Set(myArray))
7 votes
@tonkatata Cela ne fonctionne pas avec les tableaux d'objets.