比较Javascript / Angular中的2个Json对象

时间:2014-04-24 09:03:12

标签: javascript json angularjs

我需要像这样比较2个json对象:(这是谷歌Chrome控制台输出)

    Object {brand: "Marca A", type: "Tipo A", model: "Modelo A", color: "Color A", hand: "Mano A"…}
_id: "534664b081362062015d1b77"
brand: "Marca A"
color: "Color A"
hand: "Mano A"
model: "Modelo A"
price: "11,11"
type: "Tipo A"
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }

我尝试过使用stringfy,angular.equals,下划线但总是返回我的假..我想做一些比较复杂的事情,比较Json的字段,它可能吗?

3 个答案:

答案 0 :(得分:3)

angular.equals(o1, o2) 应该完成这项工作,如果结果为false,那么某些属性就不相同了。

答案 1 :(得分:1)

是一个过度结构,但是非常有帮助,尝试整合"下划线"在您的项目上,比较您可以使用的对象http://underscorejs.org/#isEqual

答案 2 :(得分:-1)

最简单的方法是使用Stringify JSON.stringify将对象更改为字符串并进行比较。

function isSame(o1, o2)
{
    return JSON.stringify(o1) !== JSON.stringify(o2);
}

但是,对于结构不同的相等JSON对象,此方法将失败,例如:

JSON.stringify({a:1,b:2}) == JSON.stringify({b:2,a:1}) // returns false

要解决此问题,您可以使用深层比较,如Object comparison in JavaScript

的答案所示

但是,您也可以使用underscore.js而不是重新发明轮子。它有一个比较对象的函数isEqual()

_.isEqual(o1, o2);