我一直在使用lodash
的最后一个版本,因为我很喜欢它。我有一个问题。
我注意到lodash
个功能是“类型”敏感
_.find(users, {'age': 1});
为1
, "1"
将无效
如果_.filter(users, {'age': "36"});
为"36"
36
将无效
有没有办法让lodash
能够filter
或find
个对象而不考虑类型?
_.find(users, {'age': 1})
将返回age
为string
或number
等于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优势。