比较Angular中的对象

时间:2013-12-05 20:13:01

标签: angularjs

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

对象1

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

对象2

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

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

4 个答案:

答案 0 :(得分:201)

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

angular.equals(obj1, obj2)

它进行了深入的比较,并不依赖于键的顺序 请参阅AngularJS DOCS和一点Demo

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

答案 1 :(得分:23)

假设两个对象的顺序相同,只需stringify两个并进行比较!

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

答案 2 :(得分:5)

这个帖子迟到了。 angular.equals做深度检查,但是有人知道为什么如果其中一个成员包含&#34; $&#34;在前缀?

您可以使用以下输入

尝试此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);

答案 3 :(得分:1)

我知道这是一个迟到的答案,但我只是失去了大约半小时的调试原因,这可能会节省一些时间。

要小心,如果对具有属性angular.equals() (属性名称以$开头)的对象使用obj.$something ,则会比较这些属性。

示例:

var obj1 = {
  $key0: "A",
  key1: "value1",
  key2: "value2",
  key3: {a: "aa", b: "bb"}
}

var obj2 = {
  $key0: "B"
  key2: "value2",
  key1: "value1",
  key3: {a: "aa", b: "bb"}
}

angular.equals(obj1, obj2) //<--- would return TRUE (despite it's not true)