簡體   English   中英

檢查對象是否包含數組中的所有鍵

[英]Check if object contains all keys in array

如何最簡潔地檢查對象是否包含數組中指定的所有鍵?

例如:

var arr = ["foo", "bar"];

var obj = {
  foo: 1,
  bar: "hello"
};

magic_function(arr, obj); // return true, all keys from array exist


var obj2 = {
  foo: 12,
  bar: "hi",
  test: "hey"
};

magic_function(arr, obj2); // return true, all keys from array exist,
                           // keys not specified in array don't matter


var obj3 = {
  foo: 5
};

magic_function(arr, obj3); // return false, "bar" is missing

這應該這樣做:

 const arr = ["foo", "bar"]; const obj = { foo: 1, bar: "hello" }; const hasAllKeys = arr.every(item => obj.hasOwnProperty(item)); console.log(hasAllKeys);

Array.prototype.every()返回true如果傳遞函數返回true的數組中的每個項目。
Object.prototype.hasOwnProperty()是不言自明的。

您可以迭代數組並使用in運算符檢查鍵

如果指定的屬性在指定的對象中,則in運算符返回true

in運算符和Object#hasOwnProperty之間的區別在於, in檢查所有屬性,甚至是原型中的屬性,如toString (如示例中所示)和Object#hasOwnProperty僅檢查自己的屬性,而不檢查原型中的屬性。

 function checkKeys(keys, object) { return keys.every(function (key) { return key in object; }); } function checkOwnKeys(keys, object) { return keys.every(function (key) { return object.hasOwnProperty(key); }); } var arr = ["foo", "bar", "toString"], obj = { foo: 1, bar: "hello" }; console.log(checkKeys(arr, obj)); // true console.log(checkOwnKeys(arr, obj)); // false console.log(checkOwnKeys(["foo", "bar"], obj)); // true

你可以用它

function magic_func(arr, obj) {
    var x = true;;
    for (var i = 0; i < arr.length; i++) {
         x = obj.hasOwnProperty(arr[i]);
    }
    return x;
}

暫無
暫無

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

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