web-dev-qa-db-fra.com

Lodash supprime les doublons du tableau

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 puis-je supprimer des objets avec des clés d'identification en double? Quelque chose avec un filtre, une carte et un objet unique, mais pas tout à fait sûr.

Mon jeu de données réel est beaucoup plus volumineux et contient plus de clés, mais le concept devrait être le même.

149
ChrisRich

_.uniq ne fonctionne plus pour la version actuelle car lodash 4.0.0 a ce changement radical . Alors utilisez soit

_.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 de id et que vos données sont stockées dans la variable data, vous pouvez utiliser uniq () function comme ceci:

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

Ou simplement

_.uniq(data, 'id');
295
ntalbs

Vous pouvez utiliser la méthode lodash _.uniqWith, 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'infos: https://lodash.com/docs/#uniqWith

39
zdrsoft

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

C'est une nouvelle façon et disponible à partir de la version 4.0.0.

_.uniqBy(data, 'id');

ou

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

Ou simplement, utilisez union , pour un tableau simple.

1
Vixson

Vous pouvez également utiliser unionBy pour la version 4.0.0 et ultérieure, comme suit: Let uniques = _.unionBy (data, 'id')

0
Himanshu Tanwar