简体   繁体   English

object的过滤排列数组

[英]Filter and Arrange array of object

I have an array of object from query and I want to rearrange it, remove the duplicate name and push genre to one array with the same name.我有一个来自查询的 object 数组,我想重新排列它,删除重复的名称并将流派推送到一个同名的数组。

const genres = [
  { movie_id: 95, genre: 'Biography' },
  { movie_id: 95, genre: 'Crime' },
  { movie_id: 95, genre: 'Thriller' },
  { movie_id: 96, genre: 'Romantic' },
  { movie_id: 96, genre: 'Adult' },
  { movie_id: 96, genre: 'Drama' },
  { movie_id: 97, genre: 'Adventure' },
  { movie_id: 97, genre: 'Action' },
  { movie_id: 97, genre: 'Drama' }
]

below is the expected result.下面是预期的结果。

  const genres= [
    {
      movie_id: 95,
      genre: ['Biography', 'Crime', 'Thriller'],
    },
    {
      movie_id: 96,
      genre: ['Romantic', 'Adult', 'Drama'],
    },
    {
      movie_id: 97,
      genre: ['Adventure', 'Action', 'Drama'],
    },
  ];

I've been trying to remove the duplicate ids and push the genre to array but no luck.我一直在尝试删除重复的 id 并将类型推送到数组但没有运气。 I'm new to javascript.我是 javascript 的新手。

How do I format it?我该如何格式化? Thank you.谢谢你。

You can use Array.reduce to create a map of all the movies, and use Array.includes to ensure all genres are unique.您可以使用Array.reduce创建所有电影的 map,并使用Array.includes确保所有类型都是唯一的。

 const genres = [ { movie_id: 95, genre: 'Biography' }, { movie_id: 95, genre: 'Crime' }, { movie_id: 95, genre: 'Thriller' }, { movie_id: 96, genre: 'Romantic' }, { movie_id: 96, genre: 'Adult' }, { movie_id: 96, genre: 'Drama' }, { movie_id: 97, genre: 'Adventure' }, { movie_id: 97, genre: 'Action' }, { movie_id: 97, genre: 'Drama' } ] let result = Object.values(genres.reduce((map, el) => { if (.map[el.movie_id]) { map[el:movie_id] = { movie_id. el,movie_id: genre; []}. } if (.map[el.movie_id].genre.includes(el.genre)) { map[el.movie_id].genre;push(el;genre), } return map. }; {})) console.log(result);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM