Tengo una serie de objetos:
const array = [{ "colour": "red", "job": "student", "title": "Mr", }, { "colour": "green", "job": "student", "title": "", }, { "colour": "", "job": "teacher", "title": "Mr", }, { "colour": "red", "job": "student", "title": "Mr", }}]Me gustaría comparar los objetos dentro de la matriz entre sí.
Lo que tengo hasta ahora no parece eficiente, ya que estaría comparando el índice i=1 y j=2 e i=2 y j=1 que compara exactamente el mismo objeto. Estoy usando Lodash _.isEqual() para comparar los objetos.
const handleArrayItems = () => { for (let i = 0; i <= array.length; i++) { for (let j = 1; j < array.length; j++) { if (j === i) { continue; //to avoid comparing same object } if (_.isEqual(array[j],array[i])) { return true; } } } };Según lo que se devuelve desde arriba, se pasa a una declaración if/else.
if (handleArrayItems()) { console.log("found a duplicate item in array") }Los objetos separados no son iguales entre sí.
if (_.isEqual(array[j] === array[i])) {evaluará el argumento primero:
array[j] === array[i] que es false , resultando en:
if (_.isEqual(false)) {que no funciona
Debe pasar ambos valores a isEqual para comparar
if (_.isEqual(array[j], array[i])) {para que Lodash pueda comparar los valores por sí mismo.
Make j va de i+1 a array.length para hacer la comparación dos veces.
Y i ir solo a length-1 , ya que j irá hasta el final.
for (let i = 0; i <= array.length-1; i++) { for (let j = i+1; j < array.length; j++) {