【问题标题】:How to return an object with a given value?如何返回具有给定值的对象?
【发布时间】:2021-11-20 19:05:14
【问题描述】:

我正在做一个搜索过滤器。我需要返回包含用户给定演员的整个对象。我可以找到演员,但我不确定如何返回演员所在的对象。

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": []
}

我的过滤功能:

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
      });
    }

希望一切都清楚。

【问题讨论】:

    标签: javascript vue.js lodash


    【解决方案1】:

    您需要通过在case 数组中查找演员来过滤allMovies 数组。如果找到匹配的actor,使用Array.some()(或lodash _.some())返回true

    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)

    【讨论】:

    • 你知道如何不只返回一个结果吗?那么,如何返回包含例如演员姓名的所有对象?
    • Filter 会返回多个结果,而 find 只会返回一个。
    【解决方案2】:

    您可以使用array#findarray#includes 来检查电影演员表中是否包含演员。

    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);

    您还可以使用将演员和演员名称转换为小写来使用array#findarray#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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多