Javascript 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'

我正在使用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
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 });