Как отфильтровать несколько строк в JS? - PullRequest
0 голосов
/ 20 октября 2018

Я хочу иметь возможность фильтровать несколько строк (типов) в массиве.Например, я хочу отфильтровать по типу мясо и введите фрукты в структуре данных ниже.Чего я хочу добиться, так это отфильтрованного объекта данных.

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.

1 Ответ

0 голосов
/ 20 октября 2018

Создайте массив из type, которые вы хотите сначала включить, а , а затем , вы можете использовать .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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...