在我的角度应用程序中,我有两个我想比较的对象。为此,我使用angular.equals(obj1,obj2)。然而,有些属性对我的比较并不重要,而angular.equals()将返回false。
在Angular中进行比较而忽略某些属性的最佳和最短方法是什么?所以例如obj1.name可以是" John"和obj2.name可以是" Tom"当所有其他属性都相同时,我仍然会成真吗?
答案 0 :(得分:1)
如果您要比较一组特定的键,您可以循环浏览这些键并检查它们是否相同。在这里,我感到很慷慨。
function compareProperties(obj1, obj2, properties) {
for(var i=0; i<properties.length; ++i) {
var key = properties[i];
if(obj1[key] !== obj2[key]) {
return false;
}
}
return true;
}
var dude = {
surname: 'Smith',
name: 'John',
nickname: 'Dude'
}
var bro = {
surname: 'Smith',
name: 'John',
nickname: 'Bro'
}
compareProperties(dude, bro, ['name','surname']); // returns true
compareProperties(dude, bro, ['name','nickname']); // returns false
答案 1 :(得分:1)
如果您只知道需要跳过哪些属性
,这是一个解决方案var match = true;
var skipAttr = ['attr1', 'attr2', ..., 'attrn'];
var objs = [obj1, obj2];
matchFailed:
for(var i = 0; i < 2; i++) {
next:
for(var k in objs[i]) {
for(var v in skipAttr) {
if(k == v)
break next;
}
if(!(k in objs[(i+1)%2]) || (i == 0 && !angular.equals(obj1[k],obj2[k])) ) {
match = false;
break matchFailed;
}
}
}
console.log(match);