LoDash _.has有多个键

Yar*_*awh 25 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) {
        isCompleteForm = false;
        break;
    }
}

if (isCompleteForm) {
    // do something fun
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

谢谢大家的精彩解决方案!如果您有兴趣,这里是不同解决方案的jsPerf.

http://jsperf.com/check-array-of-keys-for-object

All*_*sta 45

我知道问题是关于lodash,但这可以用vanilla JS完成,而且速度要快得多:

requiredKeys.every(function(k) { return k in params; })
Run Code Online (Sandbox Code Playgroud)

在ES2015中甚至更清洁:

requiredKeys.every(k => k in params)
Run Code Online (Sandbox Code Playgroud)


the*_*eye 28

你可以完全去功能性,与every,haspartial功能,这样

var requiredKeys = ['firstname', 'lastname', 'email'],
    params = {
        "firstname": "thefourtheye",
        "lastname": "thefourtheye",
        "email": "NONE"
    };
console.log(_.every(requiredKeys, _.partial(_.has, params)));
// true
Run Code Online (Sandbox Code Playgroud)

我们传递一个部分函数对象_.every,它实际上_.has部分应用于params对象._.every将迭代requiredKeys数组并将当前值传递给部分对象,该部分对象将当前值应用于部分_.has函数并将返回truefalse.仅当传递给函数对象时数组中的所有元素_.every都返回时true才会返回true.在我上面显示的示例中,由于所有键都在params,它返回true.即使单个元素不存在,它也会返回false.

  • 值得一提的是,如果要在整个应用程序中定期重复使用,这将是[mixin](https://lodash.com/docs#mixin)的理想候选者.它还可以提高可读性.[小提琴](https://jsfiddle.net/nwayve/9m9bcrtc/) (3认同)