如何检查对象是否包含一组属性

How to check an object contains a set of properties

本文关键字:是否 包含一 属性 对象 何检查 检查      更新时间:2023-09-26

我首先会说,我知道有很多方法可以做到这一点。这个问题是为了比较不同的版本。

我也知道我们正在寻找SO作为一个QA站点,而不是QAAAAAAA。。。地点

因此,我将完善这个问题,使其更加集中,最终得到一个答案。

给定一个对象:

var obj = {a: 1, b: 2, c: 3};

查明是否存在以下密钥:

var keys = ['a', 'b', 'c', 'd']; // 'd' would be flagged although a boolean would suffice

理想情况下,我想在ES5中这样做,但ES6非常受欢迎。

理想情况下不使用洛达什,但它非常受欢迎。

我相信有一个可爱的本地数组方法的组合会起作用:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

目标是拥有一个小而简洁的函数或代码行,而不是像这样的东西

var obj = {a: 1, b: 2, c: 3};
var keys = ['a', 'b', 'c', 'd'];
var found = keys.length;
for (var i = 0; i < keys.length; i++) {
  if (obj.hasOwnProperty(keys[i])) {
    found--;
  }
}
console.log("Missing:", found);

我将推出第一款产品:

var obj = {a: 1, b: 2, c: 3};
var keys = ['a', 'b', 'c', 'd'];
var allPresent = Object.keys(obj).filter(function(item) {
  return keys.indexOf(item) !== -1;
}).length === keys.length;
console.log("All present:", allPresent);

像这样:

var obj = {a: 1, b: 2, c: 3};
var keys = ['a', 'b', 'c', 'd'];
alert(keys.every(Object.prototype.hasOwnProperty, obj))

allPresent = keys.reduce(function ( acc, next ) {
    return !acc || obj.hasOwnProperty(next);
}, true);

尽管Amits的答案可能更小,并且更适合支持"every"的浏览器。(现在应该是所有的(

给定对象:

var obj = {a: 1, b: 2, c: 3},
    keys = ['a','b'];

您可以使用以下方法检查它是否包含密钥"a":

Object.keys( obj ).indexOf('a') !== -1

感谢您的评论,这里是检查OP要求完全平等的完整答案:

JSON.stringify( Object.keys( obj ) ) === JSON.stringify( keys )

或部分相等

JSON.stringify( Object.keys( obj ) ).indexOf( JSON.stringify( keys ) ) !== -1