有没有一种方法或方法链来检查键数组是否存在于lodash中可用的对象中,而不是使用以下方法?
var params = {...}
var isCompleteForm = true;
var requiredKeys = ['firstname', 'lastname', 'email']
for (var i in requiredKeys) {
if (_.has(params, requiredKeys[i]) == false) {
isCompleteForm = false;
break;
}
}
if (isCompleteForm) {
// do something fun
}
更新
感谢大家提供的出色解决方案!如果您有兴趣,这里是不同解决方案的jsPerf。
http://jsperf.com/check-array-of-keys-for-object
最佳答案
像这样,您可以完全使用 every
, has
和 partial
函数来实现功能
var requiredKeys = ['firstname', 'lastname', 'email'],
params = {
"firstname": "thefourtheye",
"lastname": "thefourtheye",
"email": "NONE"
};
console.log(_.every(requiredKeys, _.partial(_.has, params)));
// true
我们将部分函数对象传递给
_.every
,它实际上是部分应用于_.has
对象的params
。 _.every
将迭代requiredKeys
数组并将当前值传递给部分对象,该对象将当前值应用于部分_.has
函数并返回true
或false
。仅当数组中的所有元素传递给函数对象时都返回_.every
时,true
才会返回true
。在上面显示的示例中,由于所有键都在params
中,因此它返回true
。即使其中不存在单个元素,它也将返回false
。