我希望能够过滤数组中的多个字符串(类型)。例如我想过滤类型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 中实现它。
创建一个数组type
您想要首先包含的内容,以及then你可以使用.includes
对该阵列进行测试。 (目前,您的post.type.includes(filter1, filter2)
不起作用,因为includes
只接受一个参数)
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 filters = [filter1, filter2];
const filteredData = data.filter(({ type }) => filters.includes(type));
console.log(filteredData);
您还可以使用Set
降低运行时复杂性
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 filters = new Set([filter1, filter2]);
const filteredData = data.filter(({ type }) => filters.has(type));
console.log(filteredData);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)