检查JavaScript对象的最佳方法是拥有另一个JavaScript对象的所有键
Best way to Check a JavaScript Object has all the keys of another JavaScript Object
我有两个JS对象,我想检查第一个对象是否有第二个对象的所有键,然后做一些事情,否则,抛出一个异常。最好的方法是什么?
function(obj1, obj2){
if(obj1.HasAllKeys(obj2)) {
//do something
}
else{
throw new Error(...);
}
};
例如,在下面的例子中,由于FirstObject拥有SecondObject的所有密钥,它应该运行代码:
FirstObject
{
a : '....',
b : '...',
c : '...',
d : '...'
}
SecondObject
{
b : '...',
d : '...'
}
但在下面的例子中,我想抛出一个异常,因为XXX在FirstObject:中不存在
FirstObject
{
a : '....',
b : '...',
c : '...',
d : '...'
}
SecondObject
{
b : '...',
XXX : '...'
}
您可以使用:
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.
作为"一条线":
var hasAll = Object.keys(obj1).every(Object.prototype.hasOwnProperty.bind(obj2));
您可以编写一个函数来迭代和检查:
function hasAllKeys(requiredObj, secondObj) {
for (var key in requiredObj) {
if (!secondObj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
hasAllKeys(SecondObject, FirstObject);
您可以使用jQuery的$.map
方法,如下所示:$.map(a,function(value, key) {return b[key];}).length != b.length
另一种方法似乎也很好。
const o1 = {
a : '....',
b : '...',
c : '...',
d : '...'
},
o2 = {
b : '...',
d : '...',
};
///////////////////////
///// I. IN ONE LINE
///////////////////////
/**/
/**/ if(Object.keys(o2).every(key =>
/**/ key in o1
/**/ // Object.keys(o1).includes(key)
/**/ // Object.keys(o1).filter(x => x==key).length
/**/ ))
/**/ console.log(true);
/**/ else throw new Error("...");
/**/
///////////////////////
///////////////////////
///// II. IN A FUNCTION
///////////////////////
/**/
/**/ var hasAll = (o1 , o2) => {
/**/ let r = Object.keys(o2).every(key =>
/**/ // Object.keys(o1).includes(key)
/**/ // key in o1
/**/ // Object.keys(o1).filter(x => x==key).length
/**/
/**/ Object.keys(o1)
/**/ .reduce((acc,act,arr) =>
/**/ acc && (key in o1) // , true
/**/ )
/**/
/**/ );
/**/ return r;
/**/ }
/**/
/**/ let cond = hasAll(o1 , o2);
/**/
/**/ console.log(cond);
/**/
/**/ if (cond) console.log(true)
// /**/ else throw new Error("At least, one key doesn'e exist");
/**/
/**/ ////////
/**/
/**/ cond = hasAll(o2 , o1);
/**/
/**/ console.log(cond);
/**/
/**/ if (cond) console.log(true)
/**/ else throw new Error("At least, one key doesn'e exist");
/**/
///////////////////////
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值