首页 > 解决方案 > 如何获取对象数组中的值?

问题描述

我想从下面的数组中收集评级高于 3 的所有电影 ID

let movies = [
  {'name': 'Actions', 'movies': [{'id': 1, 'rating': 2}, 
                                 {'id': 2, 'rating': 1}, 
                                 {'id': 3, 'rating': 4}]},
  {'name': 'Comedy', 'movies': [{'id': 4, 'rating': 3}, 
                                 {'id': 5, 'rating': 4}, 
                                 {'id': 6, 'rating': 5}]},
  {'name': 'Sci-fi', 'movies': [{'id': 7, 'rating': 1}, 
                                 {'id': 8, 'rating': 5}, 
                                 {'id': 9, 'rating': 2}]}
];

我从下面的代码中获得评分高于 3 的 id

let res = movies
          .map( m => m.movies
                    .filter( f => f.rating > 3 ) 
          )
          .flat();
console.log(res);

输出

[[object Object] {
  id: 3,
  rating: 4
}, [object Object] {
  id: 5,
  rating: 4
}, [object Object] {
  id: 6,
  rating: 5
}, [object Object] {
  id: 8,
  rating: 5
}]

我怎样才能摆脱我的输出[object Object]rating只得到扁平的 id 数组?

标签: javascriptangularmultidimensional-array

解决方案


使用 将电影展平为数组Array.flatMap(),按 过滤rating,然后映射到ids:

const movies = [{"name":"Actions","movies":[{"id":1,"rating":2},{"id":2,"rating":1},{"id":3,"rating":4}]},{"name":"Comedy","movies":[{"id":4,"rating":3},{"id":5,"rating":4},{"id":6,"rating":5}]},{"name":"Sci-fi","movies":[{"id":7,"rating":1},{"id":8,"rating":5},{"id":9,"rating":2}]}];

const result = movies
  .flatMap(m => m.movies)
  .filter(m => m.rating > 3)
  .map(m => m.id);

console.log(result);


推荐阅读