Supposons maintenant qu'il y ait un tableau d'objets
arr=[
{
id:1,
content:'a'
},{
id:2,
content:'b'
},{
id:2,
content:'c'
},{
id:3,
content:'d'
},{
id:3,
content:'e'
},{
id:3,
content:'f'
},{
id:3,
content:'g'
},{
id:4,
content:'h'
},
]
Je souhaite supprimer le même identifiant et conserver le dernier élément de chaque identifiant
arr=[
{
id:1,
content:'a'
},{
id:2,
content:'c'
},{
id:3,
content:'g'
},{
id:4,
content:'h'
},
]
Y a-t-il une meilleure façon ? .
Par convention, code ES6
Il y a un problème ici,
findIndex
Au moins deux navigateurs ne le supportent pas, donc s'il ne le supporte pas, vous devez en écrire un vous-mêmeAutres solutions
Solution classique, utilisez Map
Parce que l'identifiant n'est pas une chaîne, utilisez la classe ES6
Map
. Lorsque la quantité de données est importante, l’utilisation d’une table de recherche peut améliorer considérablement l’efficacité par rapport à la recherche linéaire dans une liste.En fait, vous pouvez également utiliser des objets au lieu de cartes, au moins dans ce cas d'utilisation, il n'y aura aucun problème. Comme il n'y a pas de fonctionnalités es6, nous utilisons simplement la syntaxe es5. La structure et la logique du code sont les mêmes que celles du paragraphe ci-dessus
Solution étrange, utilisant un identifiant entier
Comme il s'agit d'un identifiant entier, vous pouvez le mettre directement dans le tableau en fonction de cet identifiant. Si le même identifiant est rencontré, il sera remplacé directement. Si les identifiants ne sont pas consécutifs, vous devez filtrer les éléments vides à la fin
Il y a un autre problème avec cette solution. Elle ne peut pas maintenir l'ordre des éléments du tableau d'origine. Ensuite, quelqu'un pensera certainement que la solution utilisant Map peut également réduire le code en un code similaire sans le rendre si compliqué. Bien sûr, elle peut également perdre l'ordre d'origine
.L'utilisation des fonctions fléchées simplifie comme suit :
Il y a déjà beaucoup de réponses ici, mais il n'y a aucune mention de la fonction intégrée de Array réduireRight. En fait, l'exigence du questionneur est de conserver le dernier chiffre du même identifiant, ce qui est très pratique à implémenter en utilisant réduireRight.
reduceRight commence la boucle à partir de la fin de votre tableau d'origine. La valeur initiale ici est un tableau r[0] est utilisé pour stocker l'ensemble des identifiants, et r[1] stocke le tableau de résultats s'il n'y a pas d'identifiant dans le. Set, puis ajoutez cet identifiant à Set et placez cet élément en tête du tableau résultant.
Au final, les besoins du propriétaire du sujet ont été facilement satisfaits et la commande a été garantie.
Testé personnellement et efficace
let newArr = [],
Veuillez vous y référer
Vous pouvez vous référer à ce que j'ai écrit sur mon blog. J'ai écrit 8 méthodes sur mon blog. http://alfierichou.top/2017/0...