有没有一种方法或方法链来检查键数组是否存在于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。

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

最佳答案

像这样,您可以完全使用 every has 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函数并返回truefalse。仅当数组中的所有元素传递给函数对象时都返回_.every时,true才会返回true。在上面显示的示例中,由于所有键都在params中,因此它返回true。即使其中不存在单个元素,它也将返回false

07-24 09:44
查看更多