LoDash _.has 用于多个键
LoDash _.has for multiple keys
是否有一种方法或一系列方法来检查 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。
_(requiredKeys).difference(_(params).keys().value()).empty()
我相信。关键步骤是将所有内容放入数组,然后使用集合。
或
_requiredKeys.map(_.pluck(params).bind(_)).compact().empty()
可能有用。
假设 params 可以具有比所需更多的属性...
var keys = _.keys(params);
var isCompleteForm = requiredKeys.every(function (key) {
return keys.indexOf(key) != -1;
});
应该可以解决问题。
你完全可以使用 every
, has
and 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
函数并将 return true
或 false
。 _.every
将 return true
数组中的所有元素仅当 returns true
传递给函数对象时。在我上面显示的示例中,由于所有键都在 params
中,因此它 returns true
。即使其中不存在单个元素,它也会 return false
.
我知道问题是关于 lodash 的,但这可以用 vanilla JS 完成,而且速度更快:
requiredKeys.every(function(k) { return k in params; })
在 ES2015 中甚至更干净:
requiredKeys.every(k => k in params)
是否有一种方法或一系列方法来检查 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。
_(requiredKeys).difference(_(params).keys().value()).empty()
我相信。关键步骤是将所有内容放入数组,然后使用集合。
或
_requiredKeys.map(_.pluck(params).bind(_)).compact().empty()
可能有用。
假设 params 可以具有比所需更多的属性...
var keys = _.keys(params);
var isCompleteForm = requiredKeys.every(function (key) {
return keys.indexOf(key) != -1;
});
应该可以解决问题。
你完全可以使用 every
, has
and 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
函数并将 return true
或 false
。 _.every
将 return true
数组中的所有元素仅当 returns true
传递给函数对象时。在我上面显示的示例中,由于所有键都在 params
中,因此它 returns true
。即使其中不存在单个元素,它也会 return false
.
我知道问题是关于 lodash 的,但这可以用 vanilla JS 完成,而且速度更快:
requiredKeys.every(function(k) { return k in params; })
在 ES2015 中甚至更干净:
requiredKeys.every(k => k in params)