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.