Javascript Lodash过滤对象中的所有值
我正在使用Lodash过滤对象Javascript Lodash过滤对象中的所有值,javascript,object,filter,key,lodash,Javascript,Object,Filter,Key,Lodash,我正在使用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'
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
vars。但是,我想知道是否有可能在任何键中找到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);
});
尽管上面的代码可以工作(请参阅并检查控制台),但它既不是动态的,也不是可重用的。我的意思是,如果需要添加/删除键,我必须手动添加/删除return
中的指令
关于如何使这个更智能和可重用有什么想法吗?我是否缺少一些Lodash功能
提前感谢:)
但我想知道这是否可能,而不是通过某个键“过滤”
在任意键中查找搜索值
香草JS解决方案-尝试Object.values
var search = 180;
var output = items.filter( s => Object.values( s ).includes( search ) );
演示
var搜索=180;
可变项目=[{
id:180,//为了测试而更改
名称:“富拉诺·达席尔瓦1号”,
总数:300,
其他数量:183,
日期:2018年4月5日
}, {
id:2,
姓名:“阿曼达”,
总数:250,
其他数量:180,
日期:2018年3月12日
}, {
id:3,
名称:“富拉诺·达席尔瓦3号”,
总数:300,
其他编号:211,
日期:2018年3月2日
}, {
id:4,
名称:“富拉诺·达席尔瓦4号”,
总数:300,
其他编号:211,
日期:2018年3月2日
}];
var输出=items.filter(s=>Object.values.includes(search));
控制台日志(输出)代码>关于(es6)的内容:
酷!你的回答是正确的。现在我必须找到一种方法让它在Vue.js上工作,一旦用户输入搜索
术语。你看,当我精确地输入“Amanda”,“Fulano da Silva 1”或任何精确的字符串时。当我输入“250”时它不起作用,因为在值上没有这样的字符串。我认为最好问一个新问题。谢谢:)对不起,我刚才把返回改成了这个返回app.items.filter(s=>Object.values.toString().toLowerCase().indexOf(app.search)>-1)代码>并且它按预期工作。我真的很感谢你的帮助:)
_.filter(items, { [filterBy]: search });