[英]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.