/ / Javascript compara objetos que tienen funciones usando lodash isEqual - javascript, lodash

Javascript compara objetos que tienen funciones usando lodash isEqual - javascript, lodash

¿Cómo comparar dos objetos para la igualdad si tienen funciones? isEqual de lodash funciona realmente bien hasta que se agregan funciones:

_.isEqual({
a: 1,
b: 2
}, {
b: 2,
a: 1
});

// -> true

_.isEqual({
a: 1,
b: 2,
c: function () {
return 1;
}
}, {
a: 1,
b: 2,
c: function () {
return 1;
}
});

// -> false

Respuestas

4 para la respuesta № 1

¿Seguro que quieres comparar funciones? Si solo le importa comparar cada propiedad que no es una función, esto es fácil de hacer con lodash:

var o1 = { a: 1, b: 2, c: function() { return 1; } },
o2 = { a: 1, b: 2, c: function() { return 1; } };

_.isEqual(o1, o2)
// → false

_.isEqual(_.omit(o1, _.functions(o1)), _.omit(o2, _.functions(o2)));
// → true

los funciones () function devuelve una lista de propiedades de funciones, y usando omitir(), puedes deshacerte de ellos.


3 para la respuesta № 2

Esto es lo que intenté:

_.isEqual(o1, o2, function(val1, val2) {
if(_.isFunction(val1) && _.isFunction(val2) {
return val1.toString() === val2.toString();
}
}

Lodash admite un customizer fn que le permite escribir sus propios controles de igualdad. Esto parece ser una prueba lo suficientemente buena como para ver si las funciones son las mismas carácter por carácter.


1 para la respuesta № 3

Como dice la documentación de lodash:

Las funciones y los nodos DOM no son compatibles.

https://lodash.com/docs#isEqual