如何在JavaScript中的对象数组中过滤数组? [英] How to filter array within array of objects in javascript?

查看:53
本文介绍了如何在JavaScript中的对象数组中过滤数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象数组,其中包含有关电影的信息.每个对象都具有流派的价值.该值可以是字符串或数组.

I have an array of objects containing information about movies. Every object has a value for genre. That value can be either a string or an array.

我正在从查询字符串中获取一种类型,并将其保存到一个名为genre的变量中.现在,我只想整理该类型的电影.

I am fetching a genre from the query string and saving it to a variable called genre. Now I want to sort out only the movies in that genre.

我的对象数组如下:

movies = [
            {
               title:"Apocalypse Now",
               year: "1979",
               genre: [
                  "drama",
                  "war"
               ]
            },
            {
               title:"Unforgiven",
               year: "1992",
               genre: [
                  "western",
                  "drama"
               ]
            },
            {
               title: "The big Lebowski",
               year: "1998",
               genre: "comedy"
            }
];

现在,我找到了一种可行的解决方案.但我对此不满意,因为:

Now I have found a solution that works. But I am not happy with it because:

  1. 每部电影的流派都不允许超过3种.

  1. It doesn't allow for more than 3 genres for every movie.

它看起来不漂亮,并且与其他代码的组合也不佳.而且我认为必须有一种更好的方法,但我找不到它.

It doesn't look pretty and doesn't compose well with other code. And I'm thinking there has got to be a better way but I can't find it.

这是我现在拥有的:

var genre = req.query.genre;
var movies = data.movies;
var filtered = movies.filter(function(x){
     return x.genre == genre || x.genre[0] == genre || x.genre[1] == genre || x.genre[2] == genre;
      });

推荐答案

只需使用 indexOf()

var genre = req.query.genre;
var movies = data.movies;
var filtered = movies.filter(function(x){
    return x.genre.indexOf(genre) > -1;
});

这篇关于如何在JavaScript中的对象数组中过滤数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆