Найти те же элементы массива из других массивов? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть mov ie, я хочу показать фильмы того же жанра, что я делаю не так?

Мой фильм (найди):

{
    "id": 1,
    "title": "Kill Bill",
    "genre_ids": [1, 10, 15]
}

// Все фильмы (фильмы)

{
    "id": 2,
    "title": "Leon",
    "genre_ids": [1, 12, 15]
},
{
    "id": 3,
    "title": "Spider-man",
    "genre_ids": [12, 32, 15]
},
{
    "id": 3,
    "title": "Marvel cap",
    "genre_ids": [20, 38, 1]
},

// Мой код

    return find.map(i => { // My film
        return i.genre_ids.map(ids => {
            return movies.data.results.filter(movie => { // All films
                return movie.genre_ids.filter(idMov => idMov === ids)
            })
        })
    });

1 Ответ

4 голосов
/ 18 апреля 2020

Ваш 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...