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.
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,has和partial功能,这样
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函数并将返回true或false.仅当传递给函数对象时数组中的所有元素_.every都返回时true才会返回true.在我上面显示的示例中,由于所有键都在params,它返回true.即使单个元素不存在,它也会返回false.
| 归档时间: |
|
| 查看次数: |
17153 次 |
| 最近记录: |