我在试着"平坦"具有多个重复值的数组。数组是从CSV创建的,然后我试图在其上运行API请求。CSV文件的格式如下:
Posts | Comments |
post1 comment1
post1 comment2
post1 comment3
post2 comment1
post2 comment2
post2 comment3
我使用Papaparse返回:
[{Post: 'post1', Comment: 'comment1'}, {Post: 'post1', Comment: 'comment2'}, ...]
所以我想我应该试着把它们变平,让它们看起来像:
[{Post: 'post1', {Comment: 'comment1'}, {Comment: 'comment2'}}]
我尝试使用.map
并引用index
来检查以前的Post
是否与当前的Post
相同,如果它是.push
到以前的索引,我不能使用.map
正确的做法是什么?
- 使用
Array#reduce
,在更新Map
的同时迭代列表,其中Post
是键,值是Post
和Comments
数组的对象,用于Post
- 使用
Map#values
,您可以获得分组对象的列表
const data = [ { Post: 'post1', Comment: 'comment1' }, { Post: 'post1', Comment: 'comment2' }, { Post: 'post1', Comment: 'comment3' }, { Post: 'post2', Comment: 'comment1' }, { Post: 'post2', Comment: 'comment2' }, { Post: 'post2', Comment: 'comment3' } ];
const res = [...
data.reduce((map, { Post, Comment }) => {
const { Comments = [] } = map.get(Post) ?? {};
map.set(Post, { Post, Comments: [...Comments, Comment] });
return map;
}, new Map)
.values()
];
console.log(res);