Я хочу сравнить два массива с filter
как можно эффективнее и как можно более информативно.
Я уверен, что должен быть хороший способ сделать это, не прибегая к forEach
, но хоть убей, я не могу его найти, будет ли кто-нибудь достаточно любезен, чтобы помочь мне избавиться от моих страданий?
Сценарий
mainList array
id : 1, name : 'foo', categories : ["c1","c2","c3"]
id : 2, name : 'bar', categories : ["c1","c4","c5"]
userSelectListNames array "foo"
userSelectListCats массив «c1», «c4»
Фильтр по категориям mainList - здесь я застрял
return mainList.filter(item => userSelectListCats.includes(item.categories));
Я хочу, чтобы пользователь видел обе записи, если он выбрал «c1» и «c4», или «c1» И только последний, если он выберет «c4» и «c5». Но я безнадежно запутался, когда попробовал ...
Мои 2 лучшие попытки ..
return mainList.categories.filter(item => userSelectListCats.includes(item));
Но он возвращает категории, а не mainList.
return mainList.filter(item => mainList.categories.filter(item2 => userSelectListCats.includes(item2)));
Я уверен, что должен быть хороший способ сделать это, не прибегая к forEach, но хоть убей, я не могу найди его, будет ли кто-нибудь достаточно добр, чтобы помочь мне избавиться от моих страданий?