Javascript LoDash u0.has用于多个关键点
是否有一种方法或一系列方法来检查lodash中可用的对象中是否存在键数组,而不是使用以下方法Javascript LoDash u0.has用于多个关键点,javascript,arrays,lodash,Javascript,Arrays,Lodash,是否有一种方法或一系列方法来检查lodash中可用的对象中是否存在键数组,而不是使用以下方法 var params = {...} var isCompleteForm = true; var requiredKeys = ['firstname', 'lastname', 'email'] for (var i in requiredKeys) { if (_.has(params, requiredKeys[i]) == false) { isCompleteFor
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
我相信。关键的一步是将所有内容放入数组,然后使用集合
或
可能会起作用。假设参数可以具有比所需更多的属性
var keys = _.keys(params);
var isCompleteForm = requiredKeys.every(function (key) {
return keys.indexOf(key) != -1;
});
应该做到这一点。您完全可以像这样使用功能、with和functions
var requiredKeys = ['firstname', 'lastname', 'email'],
params = {
"firstname": "thefourtheye",
"lastname": "thefourtheye",
"email": "NONE"
};
console.log(_.every(requiredKeys, _.partial(_.has, params)));
// true
我们将一个部分函数对象传递给
。每个,实际上是。部分应用于参数对象\每个
将迭代requiredKeys
数组并将当前值传递给partial对象,partial对象将当前值应用于partial\函数,并返回true
或false
<代码>\仅当数组中的所有元素传递到函数对象时返回true
时,每个才会返回true
。在上面的示例中,由于所有键都在params
中,因此它返回true
。即使其中不存在单个元素,它也会返回false
我知道问题是关于lodash的,但这可以通过vanilla JS实现,而且速度更快:
requiredKeys.every(function(k) { return k in params; })
2015年的欧洲标准甚至更清洁:
requiredKeys.every(k => k in params)
TypeError:u.pulk(…).bind不是一个函数。
对于第二个解决方案,我认为u.pulk现在在lodash 4.15.0中被称为u.map。值得一提的是,如果在整个应用程序中定期重复使用,这将是一个理想的应用程序候选。它还将提高可读性。请注意,
操作符中的也注意到,尽管OP示例提到简单(即直接)键,但lodash\uuhas()
可以处理复杂的深层路径,例如person[2]。firstName
,这显然不适用于上述示例。
requiredKeys.every(function(k) { return k in params; })
requiredKeys.every(k => k in params)