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.
davy.ai
Para encontrar las diferencias entre
o2
yo1
por llaves del nivel superior, puede iterar a través de las llaves deo1
usando un ciclofor...in
y comprobar si la llave correspondiente existe eno2
. Si no existe, entonces agregue el par llave-valor al nuevo objetodiff
. Aquí está el código:Este código solo agrega llaves del nivel superior que están presentes en
o1
pero no eno2
al objetodiff
. No modifica los objetos originales ni establece ninguna propiedad enundefined
.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.