Не работает фильтрация массива
Возникла проблема с фильтрацией массива для страницы интернет-магазина. Фильтрация происходит по принципу выбора chechbox и нажатия кнопки "Применить". Задача проверить на выбранные параметры товара (empty, lounger, scratching, gameComplex, house). Сам массив:
let catalogItems = [
{
id: 0,
src: 'url(../img/catalog/catalog-img-1.jpg)',
srcset: '',
title: 'Эконом',
size: false,
area: '0.63',
price: 100,
empty: true,
lounger: false,
scratching: false,
gameComplex: false,
house: false,
},
{
id: 1,
src: 'url(../img/catalog/catalog-img-2.jpg)',
srcset: '',
title: 'Эконом плюс',
size: '90х100х180',
area: '0.90',
price: 200,
empty: false,
lounger: true,
scratching: true,
gameComplex: false,
house: false,
},
{
id: 2,
src: 'url(../img/catalog/catalog-img-3.jpg)',
srcset: '',
title: 'Комфорт',
size: '100х125х180',
area: '1.13',
price: 250,
empty: false,
lounger: true,
scratching: true,
gameComplex: true,
house: false,
}
];
Данные о выбранных товарах вытягиваются с помощью FormData и передаются в нужные переменные. Данные получаются корректно, но массив возвращается пустой. Код фильтрации:
form.addEventListener('submit', function (ev) {
var Data = new FormData(form);
equipments = Data.getAll("equipment[]")
ev.preventDefault();
filterCatalog();
}, false);
var filterCatalog = function () {
var catalogArray = catalogItems
if (equipments.length >= 1) {
catalogArray = catalogArray.filter(e => {
equipments.forEach(element => {
if (e[element] === false) {
return false
}
})
})
}
renderCatalog(catalogArray)
}
Заранее спасибо за помощь
Ответы (1 шт):
Автор решения: c_k_rim
→ Ссылка
// catalogItems где-то объявлена выше
const neededQquipments = ['lounger', 'scratching'];
const filterCatalog = (items, equipments) => items.filter(item => equipments.map(equip => item[equip]).indexOf(false) === -1);
const filteredItems = filterCatalog(catalogItems, neededQquipments);
console.log(filteredItems);