Lodash supprime les doublons du tableau


232

Ce sont mes données:

[
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello-how-are-you',
        id: "23"    
    },
    {
        url: 'www.example.com/i-like-cats',
        id: "24"    
    },
    {
        url: 'www.example.com/i-like-pie',
        id: "25"    
    }
]

Avec Lodash, comment supprimer des objets avec des clés d'identification en double? Quelque chose avec un filtre, une carte et unique, mais pas tout à fait sûr.

Mon ensemble de données réel est beaucoup plus grand et a plus de clés, mais le concept devrait être le même.

Réponses:


439

_.uniquene fonctionne plus pour la version actuelle car lodash 4.0.0 a ce changement de rupture . La fonction a été divisée en _.uniq, _.sortedUniq, _.sortedUniqBy et & _.uniqBy

Vous pouvez utiliser _.uniqBysoit par

_.uniqBy(data, function (e) {
  return e.id;
});

ou

_.uniqBy(data, 'id');

Documentation: https://lodash.com/docs#uniqBy


Pour les anciennes versions de lodash (<4.0.0)

En supposant que les données doivent être uniques idet que vos données sont stockées dans une datavariable, vous pouvez utiliser la fonction unique () comme ceci:

_.unique(data, function (e) {
  return e.id;
});

Ou simplement

_.uniq(data, 'id');

1
Les documents lodash 4.0.1 ont changé cela en uniqBy. Impossible de faire fonctionner l'exemple ci-dessus toute ma vie en utilisant uniquement uniq.
Will Lovett

2
Avec lodash 4.x, uniq () n'accepte qu'un seul paramètre, qui est un tableau. Ainsi, comme l'a dit @WillLovett, nous pouvons utiliser uniqBy () pour résoudre ce problème.
ersefuril

1
Oh mec. Pourquoi, oh pourquoi, est-ce uniqqui se prononce vous-genou-file d'attente au lieu de ce qu'il devrait être, unique...
Josh M.

56

Vous pouvez utiliser la méthode lodash _.uniqAvec, elle est disponible dans la version actuelle de lodash 4.17.2.

Exemple:

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];

_.uniqWith(objects, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

Plus d'informations: https://lodash.com/docs/#uniqWith


6
`laissez uniqObjects = _.uniqBy (docs, function (e) {return ex + ey;}); `Cette méthode sera plus rapide pour les grands tableaux avec des objets simples
tagplus5

2
oui mais vous devez passer un attribut comme premier argument avec uniqBy, ce qui n'est pas pratique si vous le voulez unique en fonction de plusieurs attributs que vous ne connaissez pas déjà
dbrrt

10

Ou utilisez simplement union , pour un tableau simple.

_.union([1,2,3,3], [3,5])

// [1,2,3,5]

1
J'aime cette réponse. Ce n'est pas le plus lisible, mais il fonctionne réellement si vous y pensez du point de vue des mathématiques. _.union([1, 2, 2, 1, 3]) => [1, 2, 3]
Sepehr

5

Utilisez simplement _.uniqBy () . Il crée une version sans doublon d'un tableau.

Il s'agit d'une nouvelle façon et disponible à partir de la version 4.0.0.

_.uniqBy(data, 'id');

ou

_.uniqBy(data, obj => obj.id);

4

Avec lodash version 4+, vous supprimeriez les objets en double soit par propriété spécifique, soit par l'objet entier comme ceci:

var users = [
  {id:1,name:'ted'},
  {id:1,name:'ted'},
  {id:1,name:'bob'},
  {id:3,name:'sara'}
];
var uniqueUsersByID = _.uniqBy(users,'id'); //removed if had duplicate id
var uniqueUsers = _.uniqWith(users, _.isEqual);//removed complete duplicates

Source: https://www.codegrepper.com/?search_term=Lodash+remove+duplicates+from+array



1

Pour un tableau simple, vous avez l'approche d'union, mais vous pouvez également utiliser:

_.uniq([2, 1, 2]);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.