Lodash函数是“类型”敏感的

时间:2017-08-25 14:15:52

标签: lodash

我一直在使用lodash的最后一个版本,因为我很喜欢它。我有一个问题。

我注意到lodash个功能是“类型”敏感

如果_.find(users, {'age': 1});1

"1"将无效 如果_.filter(users, {'age': "36"});"36"

36将无效

问题

有没有办法让lodash能够filterfind个对象而不考虑类型?

然后

_.find(users, {'age': 1})将返回agestringnumber等于1的所有对象

1 个答案:

答案 0 :(得分:1)

由于它在传递条件时与===进行比较,但是您总是可以通过回调进行检查:

出于您的目的:

_.filter(users, function(user){return user.age==36});

即使在Native JavaScript中也是一种简单明了的查找方式,但是如果你真的想要使用每次有一个对象文字作为查询数据时不编写回调代码的好处,那么你可以使用它来转换一个反对它的相应回调。

function convertToFilterCallback(obj) {
    var keys = Object.keys(obj);
    return function(each) {
        for (var idx = 0; idx < keys.length; idx++) {
            var key = keys[idx];
            if (obj[key] != each[key]) {
                return false;
            }
        }
        return true;
    }
}

然后使用它,

_.filter(users, convertToFilterCallback({..<your object literal>..}));

但是,如果您这样做,则可以使用find filter方法,而不是lodash优势。