фильтрация массива другим массивом

266
15 ноября 2021, 03:10

Есть два массива. В одном массиве содержатся выбранные пользователем теги (жанры кино), а во втором массиве находятся сами фильмы .

Примерная структура массивов :


//массив с фильмами
data = [
{"title" : "фильм1", "tags" : ["драма", "мистика"]},
{"title" : "фильм2", "tags" : ["драма", "боевик"]},
{"title" : "фильм3", "tags" : ["ужасы", "боевик"]}
]
//массив с искомыми жанрами
selectedTags = ["драма"]
//result возвращает пустой массив, а ожидалось что будет с фильм1 и фильм2
let result = data.filter( e => selectedTags.includes(e.tags) );
//result возвращает false
let result = data.some( e => selectedTags.indexOf(e.tags) >= 0);
Answer 1

let data = [ 
  {"title" : "фильм1", "tags" : ["драма", "мистика"]}, 
  {"title" : "фильм2", "tags" : ["драма", "боевик", "бубу"]}, 
  {"title" : "фильм3", "tags" : ["ужасы", "боевик"]} 
]; 
 
let selectedTags = ["ужасы", "бубу"]; 
 
let result = data.filter( ({tags: arr}) => arr.some( tag => selectedTags.includes(tag) ) ); 
 
console.log( result );

А для строгой фильтрации:

let data = [ 
  {"title" : "фильм1", "tags" : ["драма", "мистика"]}, 
  {"title" : "фильм2", "tags" : ["драма", "боевик", "бубу"]}, 
  {"title" : "фильм3", "tags" : ["ужасы", "боевик"]} 
]; 
 
let selectedTags = ["боевик", "бубу"]; 
 
let result = data.filter( movie => selectedTags.every( tag => movie.tags.includes(tag) ) ); 
 
console.log( result );

Хотя на самом деле я бы предпочел чуть длинный классический цикл, чем вникать в эльфийский код)

READ ALSO
Как присвоить переменной js цену товара

Как присвоить переменной js цену товара

На странице выведено несколько товаров в каталоге (Woocommerce), мне нужно на этой же странице вывести по клику на "Добавить в корзину" цену именно...

279
Реализация кнопки "показать еще"

Реализация кнопки "показать еще"

Проблема в том, что в мой addEventListener попадают немного не те данные, и я не могу понять в чем дело, хоть и объявил функцию общуюПросто кода слишком...

77
Как убрать фоновую заливку в svg

Как убрать фоновую заливку в svg

Есть svg, он соединен через use с тегом path, в котором нарисован логотип из линийНа странице он отображается полностью залитым, а нужно, чтобы...

76
input type range, noUiSlider не делает десятичные числа

input type range, noUiSlider не делает десятичные числа

Нужно сверстать вот такой input range, использую noUiSlider

204