如何在 javascript 中的对象数组中过滤数组
How to filter array within array of objects in javascript?
我有一个包含电影信息的对象数组。每个对象都有一个流派值。该值可以是字符串或数组。
我正在从查询字符串中获取一种流派并将其保存到一个名为流派的变量中。现在我只想整理一下这种类型的电影。
我的对象数组如下所示:
movies = [
{
title:"Apocalypse Now",
year: "1979",
genre: [
"drama",
"war"
]
},
{
title:"Unforgiven",
year: "1992",
genre: [
"western",
"drama"
]
},
{
title: "The big Lebowski",
year: "1998",
genre: "comedy"
}
];
现在我找到了一个有效的解决方案。但我对此并不满意,因为:
它不允许每部电影超过 3 种类型。
它看起来不漂亮,不能很好地与其他代码组合。我想一定有更好的方法,但我找不到。
这是我现在拥有的:
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;
});
由于 x 可以是字符串或数组,因此如果它是字符串,则测试相等性,如果是数组,则使用 indexOf
var genre = req.query.genre;
var movies = data.movies;
var filtered = movies.filter(function(x){
return typeof x == "string" ? x == genre : x.indexOf(genre) >= 0;
});
注意:您可以使用的现代浏览器
return typeof x == "string" ? x == genre : x.includes(genre);
只需使用indexOf()
var genre = req.query.genre;
var movies = data.movies;
var filtered = movies.filter(function(x){
return x.genre.indexOf(genre) > -1;
});
我会改变你设置数据的方式,使所有内容都是一个字符串数组,即使它只是一个值。它应该是一致的。如果您使用的是 es6 或 7,则可以使用箭头函数。通过这种方式,您可以使用任意数量的流派,而不是最多 3 种。
for(let i = 0; i < movies.length; i++){
`var genre = movies[i].genre.filter(x => x.genre == "comedy");`
//do something with the value
}
相关文章:
- 使用一个键的值数组过滤多个javascript对象
- 根据另一个包含角度 js 中对象的数组过滤包含对象的数组
- Javascript:按字符串数组过滤对象数组
- 在 javascript 中使用数组过滤 for AngularJS
- 挖空和选择器的数组过滤问题
- Lodash 按数组的属性数组过滤
- 如何用另一个字符串数组过滤ng重复中的字符串数组
- 如何根据javascript数组过滤rss数据
- 基于NodeJS中的其他数组过滤/搜索对象的JavaScript数组
- 使用不带嵌套循环的数组过滤对象数组js
- 使用数组过滤数组Javascript
- 用一维数组过滤多维数组
- AngularJS:如何给值数组过滤
- Angularjs,逐个数组过滤
- 用另一个对象数组过滤Javascript对象数组
- 创建搜索栏以将数组过滤到表中
- 通过id数组过滤角度数据
- coffeescript -数组过滤不工作
- Backbone.js:如何通过模型ID数组过滤对象集合
- 使用基于嵌套值的数组过滤对象数组