【问题标题】:How to get values in an array of objects?如何获取对象数组中的值?
【发布时间】:2020-04-20 11:31:36
【问题描述】:

我想从下面的数组中收集所有评分高于 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 数组?

【问题讨论】:

    标签: javascript angular multidimensional-array


    【解决方案1】:

    使用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);

    【讨论】:

      【解决方案2】:

      您可以使用forEach() 循环:

      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
        }]
      }];
      
      let result = [];
      
      movies.forEach(({movies}) => {
        var movie3 = movies.filter(({rating}) => rating > 3).map(({id}) => id);
        result = [...result, ...movie3];
      });
      console.log(result);

      【讨论】:

      • 这只是.map()的“复杂”方式
      【解决方案3】:

      你可以在flat函数后面加上map(rw => rw.id)得到想要的输出。

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

      【讨论】:

        猜你喜欢
        • 2019-10-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多