Lodash elimina duplicados de la matriz

Resuelto ChrisRich asked hace 9 años • 8 respuestas

Estos son mis datos:

[
    {
        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, ¿cómo podría eliminar objetos con claves de identificación duplicadas? Algo con filtro, mapa y único, pero no del todo seguro.

Mi conjunto de datos real es mucho más grande y tiene más claves, pero el concepto debería ser el mismo.

ChrisRich avatar Jul 31 '15 14:07 ChrisRich
Aceptado

_.uniqueya no funciona para la versión actual de Lodash ya que la versión 4.0.0 tiene este cambio importante . La funcionalidad de _.uniquese dividió en _.uniq, _.sortedUniq, _.sortedUniqByy _.uniqBy.

Podrías usar _.uniqByasí:

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

...o así:

_.uniqBy(data, 'id');

Documentación: https://lodash.com/docs#uniqBy


Para versiones anteriores de Lodash (<4.0.0):

Suponiendo que los datos deben ser únicos según idla propiedad de cada objeto y que sus datos se almacenan en datauna variable, puede usar la _.unique()función como esta:

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

O simplemente así:

_.uniq(data, 'id');
ntalbs avatar Jul 31 '2015 07:07 ntalbs

Podrías usar el método lodash _.uniqWith, está disponible en la versión actual de lodash 4.17.2.

Ejemplo:

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

Más información: https://lodash.com/docs/#uniqWith

zdrsoft avatar Nov 18 '2016 11:11 zdrsoft

Con lodash versión 4+, eliminarías objetos duplicados ya sea por propiedad específica o por todo el objeto, así:

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

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

Taylor Hawkes avatar Nov 06 '2019 21:11 Taylor Hawkes

O simplemente use union , para una matriz simple.

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

// [1,2,3,5]
Vixson avatar Mar 23 '2019 19:03 Vixson