获取Array中的Object,该Array具有属性,该属性是包含匹配值的Array

时间:2017-07-01 23:35:09

标签: javascript arrays object ecmascript-6

我有一个具有如下结构的对象数组:

[
  {
    title: "", 
    imagePoster: "", 
    episodes: "", 
    score: "",
    genres: ["Comedy", "Drama", ...],
    description: ""
  },
  ...
]

我需要在"Comedy"数组中返回一个包含genres之类特定值的Object。我一直在尝试很多方式,例如forfiltermapindexOf ......但是,我仍然无法弄明白,除非我搜索for ["Comedy", "Drama", ...](即整个数组)。

2 个答案:

答案 0 :(得分:2)

您可以使用Array#find查找满足条件的第一个元素:

const search = "Comedy";
const found = array.find(obj => obj.genres.includes(search));

这也使用Array#includes来检查参数(搜索关键字)是否存在于每个对象的genres数组中。如果你需要IE支持,请使用Array#indexOf并检查返回值是否大于-1而不是完全相同的事情:

obj => obj.genres.indexOf(search) > -1

如果你想返回具有某种类型的所有对象,而不仅仅是第一个,请使用Array#filter过滤数组,根据条件过滤数组:

const search = "Comedy";
const found = array.filter(obj => obj.genres.includes(search));

这将过滤数组,只将包含search关键字的对象保留在genres数组中。同样,您可以将includes替换为indexOf检查,如果目标浏览器(即IE)不支持find,您始终只能访问已过滤数组的第一个元素

答案 1 :(得分:0)

Array.includes& Array.filter是你的朋友。非浏览器也有polyfill :)

最受支持的方式是使用Array.indexOf& function getMovieByGenre(genre) { return movies.filter(function(movie) { return movies.genres.indexOf(genre) >= 0 })[0]; } var someComedy = getMovieByGenre('Comedy'); if (someComedy) { // movie found }

{{1}}

我使用支持最多的代码,没有polyfill和ES6功能