Estoy tratando de filtrar el nombre de los géneros para una película según las identificaciones. así que si la identificación coincide, obtengo ese nombre.
const genres = [ { id: 28, name: "Action" }, { id: 12, name: "Adventure" }, { id: 16, name: "Animation" }, { id: 35, name: "Comedy" }, { id: 80, name: "Crime" }, { id: 99, name: "Documentary" }, { id: 18, name: "Drama" }, { id: 10751, name: "Family" }, { id: 14, name: "Fantasy" }, { id: 36, name: "History" }, { id: 27, name: "Horror" }, { id: 10402, name: "Music" }, { id: 9648, name: "Mystery" }, { id: 10749, name: "Romance" }, { id: 878, name: "Science Fiction" }, { id: 10770, name: "TV Movie" }, { id: 53, name: "Thriller" }, { id: 10752, name: "War" }, { id: 37, name: "Western" }, ]; const genre_ids = [10752, 10770, 18, 12]Puede filtrar los genres usando genre_ids y luego mapear los valores específicos
function filterGenres(genres, ids) { return genres .filter((genre) => ids.indexOf(genre.id) != -1) .map((genre) => genre.name) } o, alternativamente, utilice la función de reduce
function filterGenres(genres, ids) { return genres.reduce((results, genre) => { if(ids.indexOf(genre.id) != -1) { results.push(genre.name); } return results; }, []); }La siguiente puede ser una posible solución para lograr el objetivo deseado.
Fragmento de código
const getNames = (ids, objects) => ( ids.map(el => ( objects.find( ({id}) => id === el )?.name )) ); // below will be better in performance // but the names returned will be ordered based on 'genres' array // objects.filter(({id}) => ids.some(el => el === id)) // .map(({name}) => name) const genres = [ { id: 28, name: "Action" }, { id: 12, name: "Adventure" }, { id: 16, name: "Animation" }, { id: 35, name: "Comedy" }, { id: 80, name: "Crime" }, { id: 99, name: "Documentary" }, { id: 18, name: "Drama" }, { id: 10751, name: "Family" }, { id: 14, name: "Fantasy" }, { id: 36, name: "History" }, { id: 27, name: "Horror" }, { id: 10402, name: "Music" }, { id: 9648, name: "Mystery" }, { id: 10749, name: "Romance" }, { id: 878, name: "Science Fiction" }, { id: 10770, name: "TV Movie" }, { id: 53, name: "Thriller" }, { id: 10752, name: "War" }, { id: 37, name: "Western" }, ]; const genre_ids = [10752, 10770, 18, 12]; console.log(getNames(genre_ids, genres));Explicación
getNames para obtener el resultado.genre_idsgenres (haciendo coincidir el id prop)name del elemento de genres coincidentesMétodo comentado:
genres y desestructura para obtener solo el idid está presente en la matriz de genre_ids.map para desestructurar solo el namename se devuelve (implícitamente) Este método regresa en un orden diferente (basado en la matriz de genres ).
¿Estás intentando algo como esto?
let genre_names = new Array(); for(let i=0; i<genre_ids.length; i++) { var a = genres.find(x=>x.id == genre_ids[i]); if (!!a) genre_names.push(a.name); } console.log(genre_names);resultando en [Guerra, Películas de TV, Drama, Aventura] ?