Cómo puedo comparar si dos objetos son iguales pero provienen de referencias distintas? Ejp: var a = {name: ‘Example’}; var b = {name: ‘E...

Pregunta de la clase:
Comparaciones en JavaScript
Juan Pablo Betancur

Juan Pablo Betancur

Pregunta
studenthace 5 años

Cómo puedo comparar si dos objetos son iguales pero provienen de referencias distintas?

Ejp:

var a = {name: ‘Example’};

var b = {name: ‘Example’};

console.log(a===b);//false pero tienen Exactamente la misma estructura y valores.

6 respuestas
para escribir tu comentario
    Juan Pablo Betancur

    Juan Pablo Betancur

    studenthace 5 años

    @him122 Está brutal ese tutorial. Muy últil. Gracias!!

    Jesus Amador

    Jesus Amador

    studenthace 5 años

    Ocupas solucionarlo manual o con un poco de ayuda? https://lodash.com/docs/4.17.15#isEqual, ya que si bien comparar objetos de diferentes referencias se pone interesante, que tal si el objeto tiene otro objeto dentro :) ? ,

    Este es un ejemplo que me encontre en internet

    function deepEqual(object1, object2) { const keys1 = Object.keys(object1); const keys2 = Object.keys(object2); if (keys1.length !== keys2.length) { return false; } for (const key of keys1) { const val1 = object1[key]; const val2 = object2[key]; const areObjects = isObject(val1) && isObject(val2); if ( areObjects && !deepEqual(val1, val2) || !areObjects && val1 !== val2 ) { return false; } } return true; } function isObject(object) { return object != null && typeof object === 'object'; }

    Donde verificán los valores de cada llave pero también verifican si el valor es un objeto para hacer una concurrencia

    CRISTIAN BARBERO PÉREZ

    CRISTIAN BARBERO PÉREZ

    studenthace 5 años

    Cuando haces values(a) o keys(a) te devuelve un array con todos ellos, no es necesario que lo recorras manualmente.

    Además acabo de darme cuenta que también puedes compararlos así:

    a[0] === b[0] //true
    Juan Pablo Betancur

    Juan Pablo Betancur

    studenthace 5 años

    Gracias @ceporro !!. Técnicamente tendría que recorrer ambos objetos y comparar cada uno de sus valores.

    CRISTIAN BARBERO PÉREZ

    CRISTIAN BARBERO PÉREZ

    studenthace 5 años

    Es curioso porque tomando las llaves y los valores también da false:

    keys(a) === keys(b) //false values(a) === values(b) //false

    Si abres el objeto keys(a) o keys(b) verás que no son simplemente el texto, por lo que tienes que comparar lo siguente:

    values(a)[0] === values(b)[0] //true keys(a)[0] === keys(b)[0] //true
Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.

Fundamentos de JavaScript 2018
Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.