比较Angular中的对象

是否有可能对Angular中的两个对象进行“深层”比较? 我想要做的是比较每个键/值对。 例如:

对象1

{ key1: "value1", key2: "value2", key3: "value3" } 

对象2

 { key1: "value1", key2: "newvalue", key3: "value3" } 

我需要的是比较失败,因为只有一个键/值对是不同的。 换句话说,所有的键/值对必须完全匹配,否则失败。 这是否已经内置到Angular中? 我确信如果真的需要的话,我可以写自己的服务,但是我希望它已经内置了。类似于angular.equals。

要比较两个对象,你可以使用:

angular.equals(obj1, obj2)

它做了深入的比较,并不取决于按键的顺序请参阅AngularJS DOCS和一点演示

 var obj1 = { key1: "value1", key2: "value2", key3: {a: "aa", b: "bb"} } var obj2 = { key2: "value2", key1: "value1", key3: {a: "aa", b: "bb"} } angular.equals(obj1, obj2) //<--- would return true 

假设这两个对象的顺序是一样的,只是将它们stringify起来并比较!

 JSON.stringify(obj1) == JSON.stringify(obj2); 

这个线程迟了一点。 angular.equals做深入检查,但是没有人知道为什么它的行为不同,如果其中一个成员包含前缀“$”?

你可以用下面的input来试试这个Demo

 var obj3 = {} obj3.a= "b"; obj3.b={}; obj3.b.$c =true; var obj4 = {} obj4.a= "b"; obj4.b={}; obj4.b.$c =true; angular.equals(obj3,obj4);