我希望能够在数组中筛选多个字符串(类型)。例如,我想在下面的数据结构中筛选类型为meat和fruit的数据。 我的目标是得到一个已筛选的数据对象。
const data = [{type: "meat", food: "hamburger"}, {type:"fruit", food:"banana"}, {type:"fish", food: "red snapper"}, {type:"vegetables", food:"fungi"}]
let filter1 = 'meat'
let filter2 = 'fruit'
const filteredData = data.filter( post => post.type.includes(filter1, filter2) ? post:'');
// My expected result after filtering: [{type: "meat", food: "hamburger"}, {type:"fruit", food:"banana"}]
不幸的是,它返回了4个结果,而不是如上所期望的2个结果。
我知道如何在underscore.js等库中处理这个问题,但我希望在现代EcmaScript中实现它。
new Set([filter1, filter2]);
更改为new Set([filter1, filter2].map(str => str.toLowerCase()));
。 - CertainPerformancetoLowerCase
。.filter(({ type }) => filters.has(type.toLowerCase()));
- CertainPerformanceSet#has
和Array#includes
只能找到完全匹配的内容,无法搜索子字符串。如果你想要查找子字符串,你需要再加一个内部循环,类似于str => filers.some(filter => filter.includes(str.toLowerCase()))
。 - CertainPerformance