繁体   English   中英

如何在 Javascript 中从 Array of Array 中过滤项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM