[英]How to filter items from Array of Array in Javascript
如何根据数组中的流派项过滤电影标题?
const result= [
{
"title": "Mad Max: Fury Road",
"genre": [
"Action",
"Adventure",
"Sci-Fi"
]
},
{
"title": "The Hunger Games: Mockingjay Part 1",
"genre": [
"Adventure",
"Thriller"
]
},
{
"title": "Jurassic World",
"genre": [
"Action",
"Adventure",
"Sci-Fi"
]
},
{
"title": "Everest",
"genre": [
"Drama",
"Thriller"
]
},
{
"title": "Insurgent",
"genre": [
"Adventure"
]
},
{
"title": "Sicario",
"genre": [
"Action",
"Crime",
"Drama"
]
}
];
假设如果我想根据流派过滤电影标题名称,例如:“科幻”,那么它应该返回电影标题数组,例如:[“疯狂麦克斯:狂暴之路”、“侏罗纪世界”]
尝试了地图和过滤器的各种组合但不起作用
const newResult = result.map((curr) => curr.genre.filter((ele) => ele === search)).filter((ele) => ele);
我们使用filter
返回所有通过某些条件的电影。
对于filter
的通过条件,我们在提供的流派数组上使用every
。
如果在某个条件下调用它的数组 ( genreList
) 中的所有元素every
返回 true,则 each 返回 true。
对于every
的条件,我们检查电影的流派数组是否包含给定genreList
数组中的条目。
所以在英语中,这段代码说“请给我所有具有genreList中给出的所有类型的电影”。
const result= [ { "title": "Mad Max: Fury Road", "genre": [ "Action", "Adventure", "Sci-Fi" ] }, { "title": "The Hunger Games: Mockingjay Part 1", "genre": [ "Adventure", "Thriller" ] }, { "title": "Jurassic World", "genre": [ "Action", "Adventure", "Sci-Fi" ] }, { "title": "Everest", "genre": [ "Drama", "Thriller" ] }, { "title": "Insurgent", "genre": [ "Adventure" ] }, { "title": "Sicario", "genre": [ "Action", "Crime", "Drama" ] } ]; const moviesByGenres = (moviesList, genreList) => { return moviesList.filter((m) => { return genreList.every((g) => m.genre.includes(g)); }); } // All action movies console.log(moviesByGenres(result, ["Action"])); // All action+adventure movies console.log(moviesByGenres(result, ["Action", "Adventure"]));
使用Array#filter
选择符合设定条件的相关项目,并使用Array#map
选择您感兴趣的所选项目的属性。
const result= [ { "title": "Mad Max: Fury Road", "genre": [ "Action", "Adventure", "Sci-Fi" ] }, { "title": "The Hunger Games: Mockingjay Part 1", "genre": [ "Adventure", "Thriller" ] }, { "title": "Jurassic World", "genre": [ "Action", "Adventure", "Sci-Fi" ] }, { "title": "Everest", "genre": [ "Drama", "Thriller" ] }, { "title": "Insurgent", "genre": [ "Adventure" ] }, { "title": "Sicario", "genre": [ "Action", "Crime", "Drama" ] } ], search = "Sci-Fi"; newResult = result //which items meet the set criteria? .filter(({genre}) => genre.includes(search)) //what about those items am I zeroing in on? .map(({title}) => title); console.log( newResult );
经过反复试验找到了答案
const n = result.filter((curr) => curr['genre'].includes("Action"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.