簡體   English   中英

如何檢查對象包含一組屬性

[英]How to check an object contains a set of properties

我首先要說的是,我知道有很多方法可以做到這一點。 這個問題是為了比較不同的版本。

我也知道我們希望 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 非常受歡迎。

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

我確信有一個可以工作的原生 Array 方法的可愛組合:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM