Вложенная фильтрация JavaScript
Есть массив объектов типа
data = {
cat: 'Подгузник', //Пеленка
prod: 'Производитель1', // Производтель2 / Производитель3
type: 'Большие' // Маленькие, UltraSlim
}
Мне нужно вывести кнопки для фильтра, при нажатии на которые меняются ниже варианты подкатегорий Т.е. выбрали подгузник, ниже высветилось 2 кнопки, которые совпадают с этим фильтром (Производитель 1 и 3), дальше доступные размеры уже по этим двум фильтрам.
Есть у кого идеи для алгоритма?
Ниже моя ужасная попытка:
function showDataSort(){
let i = 0
let filters = {}
let copy = goods
for(let key of keys) {
if(key == 'articul') continue
else if(key == 'price') continue
var filterKeys = Object.keys(filters)
if(filterKeys.length > 0){
for(let fkey of filterKeys){
copy = copy.filter(e => e[fkey] == filters[fkey])
}
}
filters[key] = []
if(i == 0){
let j = 0;
filters[key].push(copy[0][key])
i++
} else {
for(let temp of copy) {
if(filters[key].indexOf(temp[key]) == -1) {
filters[key].push(temp[key])
}
}
}
}
return copy
}
Ответы (1 шт):
Автор решения: rutruyokko
→ Ссылка
Написал решение. Может кому пригодится
function clearDataView(){
let filters = {}
let copy = goods
for( let key of keys ) {
if(key == 'articul') continue // пропускаем ненужные ключи
else if(key == 'price') continue // пропускаем ненужные ключи
filters[key] = []
for( let temp of copy ){
if(filters[key].indexOf(temp[key]) == -1) {
filters[key].push(temp[key])
}
}
copy = copy.filter(e => e[key] == filters[key][0]); // выбираем первый элемент по дефолту
}
console.log(filters)
return copy
}
- filters содержит подфильтры, можно использовать для вывода
- copy содержит объекты, подходящие под выбранный фильтр