检查对象是否包含数组中的所有键

时间:2017-01-03 09:06:24

标签: javascript

如何最简洁地检查对象是否包含数组中指定的所有键?

例如:

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

3 个答案:

答案 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()会返回trueObject.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;
}