JSFiddle - React, Tailwind, and code Playground
by Maxim_Wolf
JavaScript
/*настройки струнности гитар*/
const GuitarTypes = {
"акустическая гитара": {
strings:[6,7,12],
},
"электрогитара":{
strings: [4,6,7],
},
"укулеле": {
strings: [4],
}
};
/*массив из имен типов гитар === ключиков из настроек*/
const guitarChecked = ["укулеле", "акустическая гитара"];
const getAvailableStringsChoice = (guitarChecked)=>{
return [...guitarChecked.reduce((a,b)=>{
const {strings} = GuitarTypes[b];
strings.forEach((s)=>a.add(s));
return a;
}, new Set())];
};
console.log(getAvailableStringsChoice(guitarChecked));
const stringsChecked = [4,6,];
/*массив из объектов имеющих как миниму ключики type и strings */
const allProducts = [
{type:"электрогитара",strings:6},
{type:"акустическая гитара", strings:7},
{type:"акустическая гитара", strings:6},
{type:"укулеле", strings:4}
];
const filterProductsBy = ({guitarChecked, stringsChecked}, allProducts)=> allProducts
.filter(
(product)=>(
guitarChecked.some((type)=>type===product.type)
&& stringsChecked.some((strings)=>product.strings===strings)
)
);
/*фильтруем все сразу*/
const result = filterProductsBy({guitarChecked,stringsChecked}, allProducts);
console.log(result);