Estoy haciendo un filtro de búsqueda. Necesito devolver el objeto completo que contiene el actor dado por el usuario. Puedo encontrar al actor, pero no estoy seguro de cómo devolver el objeto donde está el actor.
Archivo JSON:
{ "title": "American Assassin", "year": 2017, "cast": [ "Dylan O'Brien", "Michael Keaton", "Sanaa Lathan", "Shiva Negar", "Taylor Kitsch" ], "genres": [] }, { "title": "Mother!", "year": 2017, "cast": [ "Jennifer Lawrence", "Javier Bardem", "Michelle Pfeiffer", "Domhnall Gleeson", "Ed Harris", "Kristen Wiig" ], "genres": [] }Mi función de filtro:
checkCast(allMovies) { return filter(allMovies, (movie) => { const actor = filter(movie.cast, (actor) => { return actor.toLowerCase().includes(this.search.cast.toLowerCase()) }) console.log(actor) return actor }); }Espero que todo esté claro.
Debe filtrar la matriz allMovies buscando un actor en la matriz de case . Use Array.some() (o lodash _.some() ) para devolver true si se encuentra un actor coincidente.
const search = { cast: 'bardem' }; function checkCast(allMovies) { return allMovies.filter(movie => movie.cast.some(actor => actor.toLowerCase().includes(search.cast.toLowerCase()) ) ); } const allMovies = [{"title":"American Assassin","year":2017,"cast":["Dylan O'Brien","Michael Keaton","Sanaa Lathan","Shiva Negar","Taylor Kitsch"],"genres":[]},{"title":"Mother!","year":2017,"cast":["Jennifer Lawrence","Javier Bardem","Michelle Pfeiffer","Domhnall Gleeson","Ed Harris","Kristen Wiig"],"genres":[]}] const result = checkCast(allMovies) console.log(result)Puede usar array#find con array#includes para verificar si el reparto de la película incluye un actor.
const movies = [{ "title": "American Assassin", "year": 2017, "cast": [ "Dylan O'Brien", "Michael Keaton", "Sanaa Lathan", "Shiva Negar", "Taylor Kitsch" ], "genres": [] }, { "title": "Mother!", "year": 2017, "cast": [ "Jennifer Lawrence", "Javier Bardem", "Michelle Pfeiffer", "Domhnall Gleeson", "Ed Harris", "Kristen Wiig" ], "genres": [] }], actor = 'Ed Harris', movie = movies.find(({cast}) => cast.includes(actor)); console.log(movie); También puede usar convertir actor y emitir nombre a minúsculas para comparar usando array#find y array#some .
const movies = [{ "title": "American Assassin", "year": 2017, "cast": [ "Dylan O'Brien", "Michael Keaton", "Sanaa Lathan", "Shiva Negar", "Taylor Kitsch" ], "genres": [] }, { "title": "Mother!", "year": 2017, "cast": [ "Jennifer Lawrence", "Javier Bardem", "Michelle Pfeiffer", "Domhnall Gleeson", "Ed Harris", "Kristen Wiig" ], "genres": [] }], actor = 'ed harris', movie = movies.find(({cast}) => cast.some(member => member.toLowerCase() === actor.toLowerCase())); console.log(movie);