Ваш mov ie (find) является объектом, а не массивом, у него нет функции map
для вызова.
A Решение:
Создать функцию, которая может из одного жанра и массива фильмов возвращать массив подходящих фильмов по жанру
const matchByGenre = movies => genre =>
movies.filter(movie => movie.genre_ids.includes(genre));
Перебирать массив genre_ids
фильма для совпадений. Это дает массив совпадений массивов, объединяя их с .flat
в один массив. Этот набор используется для удаления дубликатов и возврата результата в виде массива.
const movieSet = Array.from(
new Set(film.genre_ids.map(matchByGenre(movies)).flat())
);
const film = {
id: 1,
title: "Kill Bill",
genre_ids: [1, 10, 15]
};
const movies = [
{
id: 2,
title: "Leon",
genre_ids: [1, 12, 15]
},
{
id: 3,
title: "Spider-man",
genre_ids: [12, 32, 15]
},
{
id: 4,
title: "Marvel cap",
genre_ids: [20, 38, 1]
},
{
id: 5,
title: "The Big Lebowski",
genre_ids: [20, 38, 2]
}
];
const matchByGenre = movies => genre =>
movies.filter(movie => movie.genre_ids.includes(genre));
const movieSet = Array.from(
new Set(film.genre_ids.map(matchByGenre(movies)).flat())
);
console.log(movieSet);
Примечание: Если синтаксис для matchByGenre
сбивает с толку, это карри-функция, принимающая массив фильмов и возвращающая функцию обратного вызова, которая будет использоваться array::map