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

时间:2015-10-07 11:25:12

标签: javascript lodash

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

我也理解我们正在寻找SO作为QA网站,而不是QAAAAAAA ...网站。

因此,我将改进问题,使其更具针对性,最终得到一个答案。

给出一个对象:

class String { public: String(const char∗ p = ""); // default constructor : empty string // ... }

查明是否存在以下键:

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

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

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

我确信有一个可行的原生Array方法的可爱组合:

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

目标是拥有一个小而简洁的功能或代码行,而不是像:

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

我将参与第一次发行:

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

3 个答案:

答案 0 :(得分:3)

像这样:

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

alert(keys.every(Object.prototype.hasOwnProperty, obj))
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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

虽然Amits的回答可能更小,但对于支持“every”的浏览器更受青睐。 (现在应该是所有人)

答案 2 :(得分:-1)

给定对象:

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

您可以检查它是否包含密钥&#39; a&#39;用这个:

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