检查JavaScript对象的最佳方法是拥有另一个JavaScript对象的所有键

Am1*_*3zA 1 javascript object

我有两个JS对象,我想检查第一个Object是否具有所有第二个Object的键并执行某些操作,否则抛出异常.最好的方法是什么?

function(obj1, obj2){
    if(obj1.HasAllKeys(obj2)) {
         //do something
    }
    else{
         throw new Error(...);
    } 
};
Run Code Online (Sandbox Code Playgroud)

例如,在下面的示例中,因为FirstObject具有所有SecondObject的键,所以它应该运行代码:

FirstObject
{
    a : '....',
    b : '...',
    c : '...',
    d : '...'
}
SecondObject
{    
    b : '...',    
    d : '...'
}
Run Code Online (Sandbox Code Playgroud)

但是在下面的例子中我想抛出一个异常,因为在FirstObject中不存在XXX:

FirstObject
{
    a : '....',
    b : '...',
    c : '...',
    d : '...'
}
SecondObject
{    
    b : '...',    
    XXX : '...'
}
Run Code Online (Sandbox Code Playgroud)

and*_*lrc 5

您可以使用:

var hasAll = Object.keys(obj1).every(function(key) {
  return Object.prototype.hasOwnProperty.call(obj2, key);
});
console.log(hasAll); // true if obj2 has all - but maybe more - keys that obj1 have.
Run Code Online (Sandbox Code Playgroud)

作为"一线":

var hasAll = Object.keys(obj1).every(Object.prototype.hasOwnProperty.bind(obj2));
Run Code Online (Sandbox Code Playgroud)


tym*_*eJV 5

您可以编写一个函数来迭代并检查:

function hasAllKeys(requiredObj, secondObj) {
    for (var key in requiredObj) {
        if (!secondObj.hasOwnProperty(key)) {
            return false;
        }
    }

    return true;
}

hasAllKeys(SecondObject, FirstObject);
Run Code Online (Sandbox Code Playgroud)