Lodash entfernt Duplikate aus dem Array


232

Das sind meine Daten:

[
    {
        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"    
    }
]

Wie kann ich mit Lodash Objekte mit doppelten ID-Schlüsseln entfernen? Etwas mit Filter, Karte und einzigartig, aber nicht ganz sicher.

Mein realer Datensatz ist viel größer und hat mehr Schlüssel, aber das Konzept sollte dasselbe sein.

Antworten:


438

_.uniquefunktioniert nicht mehr für die aktuelle Version, da lodash 4.0.0 diese bahnbrechende Änderung hat . Die Funktion wurde in _.uniq, _.sortedUniq, _.sortedUniqBy und _.uniqBy aufgeteilt

Sie können _.uniqByentweder von verwenden

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

oder

_.uniqBy(data, 'id');

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


Für ältere Versionen von lodash (<4.0.0)

Angenommen, die Daten sollten durch eindeutig sein idund Ihre Daten werden in dataVariablen gespeichert , können Sie die Funktion unique () wie folgt verwenden :

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

Oder einfach

_.uniq(data, 'id');

1
Die lodash 4.0.1-Dokumente haben dies in uniqBy geändert. Das obige Beispiel konnte nicht mit nur Uniq für mein Leben funktionieren.
Will Lovett

2
Mit lodash 4.x akzeptiert uniq () nur einen Parameter, nämlich ein Array. Wie @WillLovett sagte, können wir dieses Problem mit uniqBy () lösen.
Ersefuril

1
Oh Junge. Warum, oh warum, ist es, uniqwas Sie-Knie-Warteschlange ausgesprochen wird , anstatt was es sein sollte, unique...
Josh M.

56

Sie können die lodash-Methode _.uniq verwenden. Sie ist in der aktuellen Version von lodash 4.17.2 verfügbar.

Beispiel:

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 }]

Weitere Informationen: https://lodash.com/docs/#uniqWith


6
`let uniqObjects = _.uniqBy (docs, function (e) {return ex + ey;}); `Diese Methode wird für große Arrays mit einfachen Objekten schneller sein
tagplus5

2
Ja, aber Sie müssen ein Attribut als erstes Argument mit uniqBy übergeben. Dies ist nicht praktisch, wenn Sie möchten, dass es aufgrund mehrerer Attribute, die Sie noch nicht kennen,
eindeutig ist

10

Oder verwenden Sie einfach union für ein einfaches Array.

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

// [1,2,3,5]

1
Ich mag diese Antwort. Es ist nicht das am besten lesbare, aber es funktioniert tatsächlich, wenn Sie aus mathematischer Sicht darüber nachdenken. _.union([1, 2, 2, 1, 3]) => [1, 2, 3]
Sepehr

5

Verwenden Sie einfach _.uniqBy () . Es wird eine duplikationsfreie Version eines Arrays erstellt.

Dies ist ein neuer Weg und ab Version 4.0.0 verfügbar.

_.uniqBy(data, 'id');

oder

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

4

Mit lodash Version 4+ würden Sie doppelte Objekte entweder nach bestimmten Eigenschaften oder nach dem gesamten Objekt wie folgt entfernen:

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

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



1

Für ein einfaches Array haben Sie den Union-Ansatz, können aber auch Folgendes verwenden:

_.uniq([2, 1, 2]);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.