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);