比较对象而忽略某些属性

时间:2016-08-25 11:53:45

标签: javascript angularjs

在我的角度应用程序中,我有两个我想比较的对象。为此,我使用angular.equals(obj1,obj2)。然而,有些属性对我的比较并不重要,而angular.equals()将返回false。

在Angular中进行比较而忽略某些属性的最佳和最短方法是什么?所以例如obj1.name可以是" John"和obj2.name可以是" Tom"当所有其他属性都相同时,我仍然会成真吗?

2 个答案:

答案 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);