2015-07-31 35 views
101

Questo è il mio dati:Lodash rimuovere i duplicati da serie

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

Con Lodash, come avrei potuto rimuovere gli oggetti con chiavi id duplicati? Qualcosa con filtro, mappa e unico, ma non del tutto sicuro.

Il mio set di dati reali è molto più grande e ha più chiavi, ma il concetto dovrebbe essere lo stesso.

risposta

194

_.uniq non funziona più per la versione corrente in quanto il lodash 4.0.0 ha this breaking change. Quindi utilizzare

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

o

_.uniqBy(data, 'id'); 

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


Per le versioni precedenti di lodash (< 4.0.0)

Partendo dal presupposto che i dati devono essere univoci per id e i tuoi dati sono memorizzati in data variabile, è possibile utilizzare uniq() funzione come questa:

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

O semplicemente

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

Grazie. Cosi 'semplice. Come potrei mancarlo? – ChrisRich

+1

I documenti di lodash 4.0.1 lo hanno cambiato in uniqBy. Non è possibile ottenere l'esempio sopra riportato per funzionare per la vita di me utilizzando solo uniq. –

+1

Con lodash 4.x, uniq() accetta solo un parametro, che è una matrice. Quindi, come ha detto @WillLovett, possiamo usare uniqBy() per risolvere questo problema. – ersefuril

18

è possibile utilizzare il metodo lodash _.uniqWith, è disponibile nella versione corrente di lodash 4.17.2.

Esempio:

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

Maggiori informazioni: https://lodash.com/docs/#uniqWith

+1

' let uniqObjects = _.uniqBy (docs, function (e) { return e.x + e.y; }); ' Questo metodo sarà più veloce per i grandi array con oggetti semplici – tagplus5

-1

miei dati è questo.

Desidero solo i nomi della squadra da questi dati che non devono essere duplicati.

{ 
    "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

Questo non fornisce una risposta alla domanda. Puoi [cercare domande simili] (// stackoverflow.com/search), o fare riferimento alle domande correlate e collegate sul lato destro della pagina per trovare una risposta. Se hai una domanda correlata ma diversa, [fai una nuova domanda] (// stackoverflow.com/questions/ask) e includi un collegamento a questo per aiutare a fornire il contesto. Vedi: [Fai domande, ottieni risposte, senza distrazioni] (// stackoverflow.com/tour) – FelixSFD

Problemi correlati