obtener los objetos que se repiten en un array de objetos JSON con javascript (JQuery)

publicado por: Anonymous

Pongo a modo de ejemplo el siguiente array de objetos en JSON:

[{"id":"aaa","uns":"123"},{"id":"bbb","uns":"023"},{"id":"aaa","uns":"123"},{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}]. 

Me gustaría obtener un array con los objetos repetidos (obsérvese que en el ejemplo se repite el objeto con id:aaa),algo así:

[{"id":"bbb","uns":"023"},REPETIDOS[{"id":"aaa","uns":"123"}],{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}]

¿Cómo podría obtener los elementos repetidos con javascript/Jq?con un array simple lo consigo, pero con un array de objetos se me resiste.

solución

La única diferencia con el código que usas para sacar los duplicados de valores numéricos es que vas a necesitar:

  • Para ordenar el array una función de comparación que decida si un objeto es menor que otro
  • Para obtener los duplicados una función de comparación que decida si dos objetos son iguales

_x000D_

_x000D_

var data = [{"id":"aaa","uns":"123"},{"id":"bbb","uns":"023"},{"id":"aaa","uns":"123"},{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}];_x000D_
_x000D_
var isEqualFunction = function(a, b){_x000D_
  return a.id === b.id && a.uns === b.uns;_x000D_
}_x000D_
_x000D_
var compareFunction = function(a, b){_x000D_
  return a.id === b.id_x000D_
    ? (a.uns === b.uns ? 0 : (a.uns < b.uns ? -1 : 1))_x000D_
    : (a.id < b.id ? -1 : 1);_x000D_
}_x000D_
_x000D_
var arrayOrdenado = data.sort(compareFunction);_x000D_
var repetidos = []; _x000D_
for (var i = 0; i < arrayOrdenado.length - 1; i++) { _x000D_
  if (isEqualFunction(arrayOrdenado[i + 1], arrayOrdenado[i])) _x000D_
  {_x000D_
    repetidos.push(arrayOrdenado[i]); _x000D_
  } _x000D_
} _x000D_
console.log(repetidos);

_x000D_

_x000D_

_x000D_

También podrías utilizar la misma función:

_x000D_

_x000D_

var data = [{"id":"aaa","uns":"123"},{"id":"bbb","uns":"023"},{"id":"aaa","uns":"123"},{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}];_x000D_
_x000D_
var compareFunction = function(a, b){_x000D_
  return a.id === b.id_x000D_
    ? (a.uns === b.uns ? 0 : (a.uns < b.uns ? -1 : 1))_x000D_
    : (a.id < b.id ? -1 : 1);_x000D_
}_x000D_
_x000D_
var arrayOrdenado = data.sort(compareFunction);_x000D_
var repetidos = []; _x000D_
for (var i = 0; i < arrayOrdenado.length - 1; i++) { _x000D_
  if (compareFunction(arrayOrdenado[i + 1], arrayOrdenado[i]) === 0) _x000D_
  {_x000D_
    repetidos.push(arrayOrdenado[i]); _x000D_
  } _x000D_
} _x000D_
console.log(repetidos);

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *