是否可以对Angular中的两个对象进行“深度”比较?我想要做的是比较每个键/值对。例如:
对象1
{
key1: "value1",
key2: "value2",
key3: "value3"
}
对象2
{
key1: "value1",
key2: "newvalue",
key3: "value3"
}
我需要的是比较失败,因为只有一个键/值对是不同的。换句话说,所有键/值对必须完全匹配或者失败。这是否已经内置于Angular中。我确信如果我真的需要,我可以编写自己的服务,但我希望它已经内置。类似于angular.equals。
答案 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;在前缀?
您可以使用以下输入
尝试此Demovar 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)