如何最简洁地检查对象是否包含数组中指定的所有键?
例如:
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
答案 0 :(得分:11)
这应该这样做:
var arr = ["foo", "bar"];
var obj = {
foo: 1,
bar: "hello"
};
var hasAllKeys = arr.every(function(item){
return obj.hasOwnProperty(item);
});
console.log(hasAllKeys);
如果传递的函数返回{strong>数组中每个项的
true
,则 Array.prototype.every()
会返回true
。
Object.prototype.hasOwnProperty()
非常明显。
答案 1 :(得分:6)
您可以迭代数组并使用in
operator
如果指定的属性位于指定的对象中,
in
运算符将返回true
。
in
运算符与Object#hasOwnProperty
之间的差异是,in
检查所有属性,甚至是原型中的属性,如toString
(如示例所示)和{ {1}}仅检查自己的属性,而不检查原型中的属性。
Object#hasOwnProperty

答案 2 :(得分:-2)
您可以使用此
function magic_func(arr, obj) {
var x = true;;
for (var i = 0; i < arr.length; i++) {
x = obj.hasOwnProperty(arr[i]);
}
return x;
}