es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar las diferencias entre dos Objetos de JavaScript.

Sí, hay una multitud de preguntas con títulos similares a este y puedo asegurarles que he probado casi todas ellas. Probé todo lo que Google me arrojó. Ninguno fue suficiente.

Considerando estos dos objetos:

Cómo encuentro las diferencias entre o2 y o1, por claves de nivel superior, creo, sin “destruir” el objeto estableciendo los valores de las propiedades como undefined (honestamente, encontré esa respuesta, aquí, preposterous).

¿Por qué necesito esto? El o1 aquí representado contiene “todos los datos” y o2 un subconjunto que se eliminará para poder realizar una actualización. Puede pensarlo como la inversa de una intersección.

En pseudo-código anterior, todo lo que quiero como salida es:

Por supuesto, este es un ejemplo simplificado en exceso, en el verdadero trato tengo muchas otras propiedades, con valores diferentes, siempre de tipos de datos primitivos (texto sin formato, enteros, booleanos …) anidados de un solo nivel (como o2) o profundamente más niveles, pero siempre de tipos primitivos.

Suena como algo muy simple pero simplemente no pude encontrar nada sin NodeJS, Lodash, Underscore u otra biblioteca de terceros.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar las diferencias entre o2 y o1 por llaves del nivel superior, puede iterar a través de las llaves de o1 usando un ciclo for...in y comprobar si la llave correspondiente existe en o2. Si no existe, entonces agregue el par llave-valor al nuevo objeto diff. Aquí está el código:

    const diff = {};
    
    for (const key in o1) {
      if (!o2.hasOwnProperty(key)) {
        diff[key] = o1[key];
      }
    }
    

    Este código solo agrega llaves del nivel superior que están presentes en o1 pero no en o2 al objeto diff. No modifica los objetos originales ni establece ninguna propiedad en undefined.

    Puede utilizar este mismo enfoque para encontrar diferencias entre objetos anidados si es necesario, mediante la iteración recursiva a través de cada nivel de los objetos.

Comments are closed.