JavaScript中使用forEach合并数组对象并聚合邮箱可行吗?
用forEach实现邮箱汇总需求
当然可以用forEach实现这个需求!下面我给你一步步拆解实现逻辑和代码:
首先,我们需要先按ticketId把相同工单下的邮箱分组收集起来。可以借助一个临时对象来做分组,然后通过forEach遍历原始数据,把每个成员的邮箱归类到对应的工单下:
var originalData = [ { id: 9, ticketId: 9, member: { id: 3, email: 'ganeshpandi@gmail.com' } }, { id: 10, ticketId: 9, member: { id: 4, email: 'braveganesh128@gmail.com' } } ]; // 临时对象,用来按ticketId分组存储邮箱 var groupedTickets = {}; originalData.forEach(item => { const ticketId = item.ticketId; const email = item.member.email; // 如果当前ticketId还没在分组对象里,初始化对应的结构 if (!groupedTickets[ticketId]) { groupedTickets[ticketId] = { ticketId: ticketId, member: { email: [] } }; } // 把当前邮箱添加到对应ticketId的数组中 groupedTickets[ticketId].member.email.push(email); }); // 将分组对象转换为你需要的数组格式 var data = Object.values(groupedTickets); console.log(data);
这段代码运行后,data的结构就和你期望的完全一致了:
[ { ticketId: 9, member: { email: ['ganeshpandi@gmail.com','braveganesh128@gmail.com'] } } ]
简单说下逻辑:
- 用
groupedTickets对象来记录每个工单的邮箱集合,键就是ticketId - 遍历原始数据时,检查当前工单是否已存在,不存在就创建初始结构
- 把每个成员的邮箱push到对应工单的邮箱数组里
- 最后用
Object.values()把对象转成数组,得到最终格式
内容的提问来源于stack exchange,提问作者user7784271
相关产品推荐
相关产品推荐

