我有一个具有如下结构的对象数组:
[
{
title: "",
imagePoster: "",
episodes: "",
score: "",
genres: ["Comedy", "Drama", ...],
description: ""
},
...
]
我需要在"Comedy"
数组中返回一个包含genres
之类特定值的Object。我一直在尝试很多方式,例如for
,filter
,map
,indexOf
......但是,我仍然无法弄明白,除非我搜索for ["Comedy", "Drama", ...]
(即整个数组)。
答案 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功能