按子数组值过滤对象数组

yob*_*oya 6 javascript arrays

这是我想要做的:

movies = [{'title': 'a', 'genres': ['Romance', 'Comedy']}, 
          {'title': 'b', 'genres': ['Drama', 'Comedy']}, 
          {'title': 'c', 'genres': ['Action', 'Adventure']}]

filters = ['Romance', 'Drama']
Run Code Online (Sandbox Code Playgroud)

过滤数组的所需内容:

[{'title': 'a', 'genres': ['Romance', 'Comedy']}, 
 {'title': 'b', 'genres': ['Drama', 'Comedy']}]
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何在给定另一个值数组的情况下过滤数组.如果'filters'只是一个字符串,那么我可以这样做:

movies.filter(x => x.genres.includes(filters))
Run Code Online (Sandbox Code Playgroud)

但是,如果过滤器是一个值数组,这显然不起作用.

任何帮助深表感谢.

CRi*_*ice 7

你很近.看起来你需要的是数组.some方法.如果任何项的回调都为真,那么该方法将返回true,因此您需要将"some"类型包含在过滤器列表中:

movies = [{
    'title': 'a',
    'genres': ['Romance', 'Comedy']
  },
  {
    'title': 'b',
    'genres': ['Drama', 'Comedy']
  },
  {
    'title': 'c',
    'genres': ['Action', 'Adventure']
  }
]

filters = ['Romance', 'Drama']

//[{'title': 'a', 'genres': ['Romance', 'Comedy']}, 
// {'title': 'b', 'genres': ['Drama', 'Comedy']}]

console.log(movies.filter(x => x.genres.some(g => filters.includes(g))))
Run Code Online (Sandbox Code Playgroud)