2015-07-31 3 views
101

Dies sind meine Daten:Lodash entfernen Duplikate aus Array

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

Mit Lodash, wie kann ich Objekte mit doppeltem ID Schlüssel zu 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 das gleiche sein.

Antwort

194

_.uniq nicht mehr für die aktuelle Version als lodash 4.0.0 hat this breaking change. So verwenden entweder

_.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)

Unter der Annahme, dass die Daten eindeutig sein sollte von id und Ihre Daten werden ingespeichertVariable, Sie uniq() Funktion wie diese verwenden:

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

Oder einfach

_.uniq(data, 'id'); 
+0

Danke. So einfach. Wie könnte ich das vermissen? – ChrisRich

+1

Die Dokumentation zu lodash 4.0.1 hat dies in uniqBy geändert. Das obige Beispiel konnte nicht für das Leben von mir funktionieren, das nur uniq verwendet. –

+1

Mit lodash 4.x, uniq() akzeptieren Sie nur einen Parameter, der ein Array ist. So wie @WillLovett sagte, können wir uniqBy() verwenden, um dieses Problem zu lösen. – ersefuril

18

Sie könnten Methode _.uniqWith verwenden lodash ist es 4.17.2 in der aktuellen Version von lodash zur Verfügung.

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

+1

' lassen Sie uniqObjects = _.uniqBy (Dokument, Funktion (e) { zurück e.x + e.y; }); ' Diese Methode wird für große Arrays mit einfachen Objekten schneller sein – tagplus5

-1

Meine Daten ist dies.

Ich möchte nur Namen des Teams aus diesen Daten, die nicht dupliziert werden sollen.

{ 
    "name": "English Premier League 2015/16", 
    "rounds": [ 
    { 
     "name": "Play-Off um 1 Premierleague-Platz:", 
     "matches": [ 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "manutd", 
      "name": "Manchester United", 
      "code": "MUN" 
      }, 
      "team2": { 
      "key": "tottenham", 
      "name": "Tottenham Hotspur", 
      "code": "TOT" 
      }, 
      "score1": 1, 
      "score2": 0 
     }, 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "bournemouth", 
      "name": "Bournemouth", 
      "code": "BOU" 
      }, 
      "team2": { 
      "key": "astonvilla", 
      "name": "Aston Villa", 
      "code": "AVL" 
      }, 
      "score1": 0, 
      "score2": 1 
     }, 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "everton", 
      "name": "Everton", 
      "code": "EVE" 
      }, 
      "team2": { 
      "key": "watford", 
      "name": "Watford", 
      "code": "WAT" 
      }, 
      "score1": 2, 
      "score2": 2 
     }, 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "leicester", 
      "name": "Leicester City", 
      "code": "LEI" 
      }, 
      "team2": { 
      "key": "sunderland", 
      "name": "Sunderland", 
      "code": "SUN" 
      }, 
      "score1": 4, 
      "score2": 2 
     }, 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "norwich", 
      "name": "Norwich", 
      "code": "NOR" 
      }, 
      "team2": { 
      "key": "crystalpalace", 
      "name": "Crystal Palace", 
      "code": "CRY" 
      }, 
      "score1": 1, 
      "score2": 3 
     }, 
     { 
      "date": "2015-08-08", 
      "team1": { 
      "key": "chelsea", 
      "name": "Chelsea", 
      "code": "CHE" 
      }, 
      "team2": { 
      "key": "swansea", 
      "name": "Swansea", 
      "code": "SWA" 
      }, 
      "score1": 2, 
      "score2": 2 
     }, 
     { 
      "date": "2015-08-09", 
      "team1": { 
      "key": "arsenal", 
      "name": "Arsenal", 
      "code": "ARS" 
      }, 
      "team2": { 
      "key": "westham", 
      "name": "West Ham United", 
      "code": "WHU" 
      }, 
      "score1": 0, 
      "score2": 2 
     }, 
     { 
      "date": "2015-08-09", 
      "team1": { 
      "key": "newcastle", 
      "name": "Newcastle United", 
      "code": "NEW" 
      }, 
      "team2": { 
      "key": "southampton", 
      "name": "Southampton", 
      "code": "SOU" 
      }, 
      "score1": 2, 
      "score2": 2 
     }, 
     { 
      "date": "2015-08-09", 
      "team1": { 
      "key": "stoke", 
      "name": "Stoke City", 
      "code": "STK" 
      }, 
      "team2": { 
      "key": "liverpool", 
      "name": "Liverpool", 
      "code": "LIV" 
      }, 
      "score1": 0, 
      "score2": 1 
     }, 
     { 
      "date": "2015-08-10", 
      "team1": { 
      "key": "westbrom", 
      "name": "West Bromwich Albion", 
      "code": "WBA" 
      }, 
      "team2": { 
      "key": "mancity", 
      "name": "Manchester City", 
      "code": "MCI" 
      }, 
      "score1": 0, 
      "score2": 3 
     } 
     ] 
    } 
+1

Dies bietet keine Antwort auf die Frage. Sie können [ähnliche Fragen suchen] (// stackoverflow.com/search) oder auf die verwandten und verknüpften Fragen auf der rechten Seite der Seite verweisen, um eine Antwort zu finden. Wenn Sie eine verwandte, aber andere Frage haben, [stellen Sie eine neue Frage] (// stackoverflow.com/questions/ask), und fügen Sie einen Link zu diesem ein, um den Kontext zu verdeutlichen. Siehe: [Fragen stellen, Antworten erhalten, keine Ablenkungen] (// stackoverflow.com/tour) – FelixSFD