首页 > 解决方案 > 根据其中一个对象组合来自一组对象的数据

问题描述

有一个这样的对象数组:

[{"event_id":1,"person":"John"},
 {"event_id":2,"person":"John"},
 {"event_id":3,"person":"Mike"},
 {"event_id":1,"person":"Mike"},
 {"event_id":1,"person":"Anna"},
 {"event_id":3,"person":"Anna"}]

想要的结果应该基于 将它们组合起来,event_id并以这样的表结构显示它们:

1 John, Mike, Ana
2 John
3 Mike, Anna

每行代表一个事件,并且这些行包含参与该事件的人员。我不知道如何在 JavaScript 中做到这一点。有什么建议么?

标签: javascriptarraysecmascript-6

解决方案


您可以使用减少

const data = [
    { event_id: 1, person: 'John' },
    { event_id: 2, person: 'John' },
    { event_id: 3, person: 'Mike' },
    { event_id: 1, person: 'Mike' },
    { event_id: 1, person: 'Anna' },
    { event_id: 3, person: 'Anna' },
];

const result = data.reduce(
    (acc, val) => ({
        ...acc,
        [val.event_id]: acc[val.event_id] ? [...acc[val.event_id], val.person] : [val.person],
    }),
    {},
);

console.log(result);


推荐阅读