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.

ChrisRich
la source

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');
ntalbs
la source
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

zdrsoft
la source
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]
Vixson
la source
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);
Hassan Ajaz
la source
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

Taylor Hawkes
la source
1

Vous pouvez également utiliser unionBy pour 4.0.0 et versions ultérieures, comme suit: let uniques = _.unionBy (data, 'id')

Himanshu Tanwar
la source
1

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

_.uniq([2, 1, 2]);
ZettaPal
la source