Javascript LoDash u0.has用于多个关键点

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

是否有一种方法或一系列方法来检查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

我相信。关键的一步是将所有内容放入数组,然后使用集合


可能会起作用。

假设参数可以具有比所需更多的属性

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)