Как отфильтровать карточки по значению свойства объекта?
Есть объект с героями.У каждого героя есть ключ movies - это массив с фильмами, где участвовал данный герой. Мне необходимо найти всех героев, у которых в movies есть значение === выбранному значению из выпадающего списка и вывести ВСЕХ героев, у которых в movies есть такой фильм. Нюанс в том, что несколько героев могли сниматься в одном и том же movies, поэтому нужно получить и вывести на экран ВСЕХ героев по данному критерию. Значения из выпадающего списка - это список фильмов.
[
{
"name": "Ancient One",
"species": "human",
"gender": "Female",
"birthDay": "1316",
"deathDay": "2017",
"status": "deceased",
"actors": "Tilda Swinton",
"photo": "dbimage/DS_Ancient_One_Poster_cropped.png",
"movies": [
"Doctor Strange",
"Avengers: Endgame"
]
},
{
"name": "Ant-Man",
"realName": "Scott Edward Harris Lang",
"species": "human",
"citizenship": "American",
"gender": "male",
"status": "alive",
"actors": "Paul Rudd",
"photo": "dbimage/AntMan-EndgameProfile.jpg",
"movies": [
"Ant-Man",
"Captain America: Civil War",
"Ant-Man and the Wasp",
"Avengers: Endgame"
]
},
{
"name": "Black Panther",
"realName": "T'Challa",
"species": "human",
"citizenship": "Wakandan",
"gender": "male",
"status": "alive",
"actors": "Chadwick Boseman",
"photo": "dbimage/Black_Panther_AIW_Profile.jpg",
"movies": [
"Captain America: Civil War",
"Black Panther",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Black Widow",
"realName": "Natalia Alianovna Romanoff",
"species": "human",
"citizenship": "Soviet",
"gender": "female",
"birthDay": "1984",
"deathDay": "2014",
"status": "alive",
"actors": "Scarlett Johansson",
"photo": "dbimage/BlackWidow-EndgameProfile.jpg",
"movies": [
"Iron Man 2",
"The Avengers",
"Captain America: The Winter Soldier",
"Avengers: Age of Ultron",
"Captain America: Civil War",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Captain America",
"realName": "Steven Grant Rogers",
"species": "human",
"citizenship": "British",
"gender": "male",
"birthDay": "1918",
"status": "alive",
"actors": "Chris Evans",
"photo": "dbimage/CapAmerica-EndgameProfile.jpg",
"movies": [
"Captain America: The First Avenger",
"The Avengers",
"Captain America: The Winter Soldier",
"Avengers: Age of Ultron",
"Captain America: Civil War",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Captain Marvel",
"realName": "Carol Danvers",
"species": "human",
"citizenship": "American",
"gender": "female",
"status": "alive",
"actors": "Brie Larson",
"photo": "dbimage/CapMarvel-EndgameProfile.jpg",
"movies": [
"Captain Marvel",
"Avengers: Endgame"
]
}
]
Ответы (1 шт):
Автор решения: Yaroslav Molchan
→ Ссылка
Самый простой вариант как по мне использовать filter, в нём уже includes:
var heroes = [
{
"name": "Ancient One",
"species": "human",
"gender": "Female",
"birthDay": "1316",
"deathDay": "2017",
"status": "deceased",
"actors": "Tilda Swinton",
"photo": "dbimage/DS_Ancient_One_Poster_cropped.png",
"movies": [
"Doctor Strange",
"Avengers: Endgame"
]
},
{
"name": "Ant-Man",
"realName": "Scott Edward Harris Lang",
"species": "human",
"citizenship": "American",
"gender": "male",
"status": "alive",
"actors": "Paul Rudd",
"photo": "dbimage/AntMan-EndgameProfile.jpg",
"movies": [
"Ant-Man",
"Captain America: Civil War",
"Ant-Man and the Wasp",
"Avengers: Endgame"
]
},
{
"name": "Black Panther",
"realName": "T'Challa",
"species": "human",
"citizenship": "Wakandan",
"gender": "male",
"status": "alive",
"actors": "Chadwick Boseman",
"photo": "dbimage/Black_Panther_AIW_Profile.jpg",
"movies": [
"Captain America: Civil War",
"Black Panther",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Black Widow",
"realName": "Natalia Alianovna Romanoff",
"species": "human",
"citizenship": "Soviet",
"gender": "female",
"birthDay": "1984",
"deathDay": "2014",
"status": "alive",
"actors": "Scarlett Johansson",
"photo": "dbimage/BlackWidow-EndgameProfile.jpg",
"movies": [
"Iron Man 2",
"The Avengers",
"Captain America: The Winter Soldier",
"Avengers: Age of Ultron",
"Captain America: Civil War",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Captain America",
"realName": "Steven Grant Rogers",
"species": "human",
"citizenship": "British",
"gender": "male",
"birthDay": "1918",
"status": "alive",
"actors": "Chris Evans",
"photo": "dbimage/CapAmerica-EndgameProfile.jpg",
"movies": [
"Captain America: The First Avenger",
"The Avengers",
"Captain America: The Winter Soldier",
"Avengers: Age of Ultron",
"Captain America: Civil War",
"Avengers: Infinity War",
"Avengers: Endgame"
]
},
{
"name": "Captain Marvel",
"realName": "Carol Danvers",
"species": "human",
"citizenship": "American",
"gender": "female",
"status": "alive",
"actors": "Brie Larson",
"photo": "dbimage/CapMarvel-EndgameProfile.jpg",
"movies": [
"Captain Marvel",
"Avengers: Endgame"
]
}
];
var selectedMovie = 'Avengers: Endgame';
var filtered = heroes.filter(function (hero) {
return hero.movies.includes(selectedMovie);
});
console.log(filtered);