WDP*_*WDP 3 javascript filtering filter include ecmascript-6
我希望能够过滤数组中的多个字符串(类型).例如,我想在下面的数据结构中过滤类型肉和类型水果.我想要实现的是过滤后的数据对象.
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"}]
Run Code Online (Sandbox Code Playgroud)
不幸的是,它返回了4个结果而不是上面预期的2个结果.
我知道如何在像_underscore.js这样的库中处理它,但我想在现代的EcmaScript中实现它.
首先创建type要包含的s 数组,然后可以.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);Run Code Online (Sandbox Code Playgroud)
您还可以使用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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |