找到两个Javascript对象的公共成员

sel*_*dog 10 javascript underscore.js

在两个Javascript对象中查找公共成员的最简单方法是什么?这个问题与平等无关.我不关心每个成员的值,只是它们存在于两个对象中.

这是我到目前为止所做的(使用underscore.js):

_.intersection(_.keys({ firstName: 'John' }), _.keys({ firstName: 'Jane', lastName: 'Doe' }))
Run Code Online (Sandbox Code Playgroud)

这给了我一个['firstName']预期的结果,但我想找到一种更简单或更有效的方法,最好是vanilla Javascript.

  • 使用下划线有更好/更简单的方法吗?
  • 没有下划线(首选)有更好/更简单的方法吗?

Pet*_*son 10

当然,只需遍历一个对象的键并构造另一个对象共享的键数组:

function commonKeys(obj1, obj2) {
  var keys = [];
  for(var i in obj1) {
    if(i in obj2) {
      keys.push(i);
    }
  }
  return keys;
}
Run Code Online (Sandbox Code Playgroud)

  • @RobG我不确定我理解.你的意思是我应该使用`obj1.hasOwnProperty(i)`和`obj2.hasOwnProperty(i)`测试,因为`i`可能是用户定义的可枚举原型成员? (2认同)

Cas*_*Chu 5

这适用于现代浏览器:

function commonKeys(a, b) {
    return Object.keys(a).filter(function (key) { 
        return b.hasOwnProperty(key); 
    });
};

// ["firstName"]
commonKeys({ firstName: 'John' }, { firstName: 'Jane', lastName: 'Doe' });
Run Code Online (Sandbox Code Playgroud)