我正在使用 Lodash 进行对象的过滤。
var search = 180;
var filterBy = "other_num";
var items = [{
id: 1,
name: 'Fulano da Silva 1',
num: 300,
other_num: 183,
date: '05/04/2018'
}, {
id: 2,
name: 'Amanda',
num: 250,
other_num: 180,
date: '12/03/2018'
}, {
id: 3,
name: 'Fulano da Silva 3',
num: 300,
other_num: 211,
date: '02/03/2018'
}, {
id: 4,
name: 'Fulano da Silva 4',
num: 300,
other_num: 211,
date: '02/03/2018'
}, ];
var filtered = _.filter(items, function(item) {
return (item[filterBy].toString().toLowerCase().indexOf( search.toString().toLowerCase()) > -1);
});
console.log(filtered);
如您所见,我已经设置了
search
和filterBy
变量。但是,我想知道是否有可能在任何键中查找search
的值,而不是“按关键字筛选”。像这样的东西:
var filtered = _.filter(items, function(item) {
return (item.id.toString().toLowerCase().indexOf(search.toString().toLowerCase()) > -1) || (item.name.toString().toLowerCase().indexOf(search.toString().toLowerCase()) > -1) || (item.num.toString().toLowerCase().indexOf(search.toString().toLowerCase()) > -1) || (item.other_num.toString().toLowerCase().indexOf(search.toString().toLowerCase()) > -1) || (item.date.toString().toLowerCase().indexOf(search.toString().toLowerCase()) > -1);
});
虽然上面的代码可以工作(请参见this fiddle并检查控制台),但它不是动态的也不可重用。我的意思是,如果需要添加/删除键,则必须手动从return
中添加/删除指令。
有没有想法如何使其更加智能和可重用?我是否错过了一些 Lodash 功能?
提前致谢 :)
return app.items.filter( s => Object.values( s ).toString().toLowerCase().indexOf( app.search ) > -1 );
,然后它按预期工作了。非常感谢你的帮助 :) - Eric Gruby