2010-09-24 24 views
12

Duplicar posibles:
Object comparison in JavaScriptLa comparación de objetos JavaScript nativos con jQuery

Tengo dos objetos nativos de JavaScript:

var foo = { hello: 'world', holy: { shit: 'batman' } }; 
var bar = { ... }; 

me gustaría comparar los dos (foo == bar).

+3

+1 para los nombres de propiedad –

+0

¡De hecho! Solucionado. –

+0

Hay una discusión sobre esto aquí: [http://stackoverflow.com/questions/1068834/object-comparison-in-javascript](http://stackoverflow.com/questions/1068834/object-comparison-in-javascript) – fehays

Respuesta

1

jQuery no tiene una utilidad incorporada para comparar objetos. No está claro desde tu publicación qué información quieres obtener de tus dos objetos. ¿Estás tratando de ordenarlos?

Dependiendo de lo que esté intentando hacer, es posible que pueda satisfacer su caso de uso utilizando uno de los métodos de utilidad de jQuery. Ver, por ejemplo: jQuery.extend, jQuery.each, jQuery.map y jQuery.merge. jQuery se ocupa principalmente de la manipulación de elementos DOM; no tiene una característica incorporada para la clasificación de listas (aunque es posible que pueda encontrar un complemento).

Mira la documentación de los servicios públicos de jQuery:

http://api.jquery.com/category/utilities/

Además, la salida array.sort(), que al parecer se construye en javascript:

http://www.javascriptkit.com/javatutors/arraysort.shtml

6

Esto funciona bien, pero sólo en algunos casos:

var obj1 = {n1: "v1", n2: "v2"}, 
    obj2 = {n1: "v1", n2: "v2"}, 
    obj3 = {n2: "v2", n1: "v1"}, 
    obj4 = {n2: "v2", n1: "v1", f: function(){}}; 


// this will work correctly: 
JSON.stringify(obj1) == JSON.stringify(obj2); //true 


// but this fails :(
JSON.stringify(obj2) == JSON.stringify(obj3); //false 


// and this :(
JSON.stringify(obj3) == JSON.stringify(obj4); //true 
+4

Comparar objetos con 'JSON.stringify' solo * algunas veces * funcionará porque el orden de las teclas no está bien definido. Las propiedades simplemente sucedieron iteradas en el mismo orden en este ejemplo, y en la implementación particular probada, pero * este comportamiento no está definido y no debe usarse *. –

+0

Creo que este enfoque podría modificarse (por ejemplo, serializar el objeto con las claves en orden ordenado) para abordar el problema descrito por pst, ¿no es así? – iX3

+1

siguiendo @ user166390. Este método SÓLO funciona si el objeto no contiene Funciones, nodos DOM, y el orden de los campos sigue siendo el mismo. Funciona al comparar JSON de alguna API. Pero, si compara objetos creados por usted, ¿POR QUÉ NO USAR UNA ID ÚNICA? – Dan

Cuestiones relacionadas