如何将数组中同stage键值的对象content合并至对应数组
按Stage归集Content值的实现方案
需求说明
将数组中stage键值相同(仅AT_CALLCENTER或AT_SITE)的对象,其content值合并到对应数组中,最终生成以stage为键、对应content数组为值的对象。
原始输入数组
[ { candidateId: 'DEMO-000031', content: 'test', stage: 'AT_CALLCENTER' }, { candidateId: 'DEMO-000031', content: 'test', stage: 'AT_CALLCENTER' }, { candidateId: 'DEMO-000031', content: 'Hello Alex', stage: 'AT_CALLCENTER' }, { candidateId: 'DEMO-000031', content: 'test', stage: 'AT_CALLCENTER' }, { candidateId: 'DEMO-000031', content: 'ttests', stage: 'AT_SITE' }, { candidateId: 'DEMO-000031', content: 'test', stage: 'AT_SITE' }, { candidateId: 'DEMO-000031', content: 'testest', stage: 'AT_SITE' }, { candidateId: 'DEMO-000031', content: 'test', stage: 'AT_SITE' } ]
预期输出
{ "AT_CALLCENTER": ["test", "test", "Hello Alex", "test"], "AT_SITE": ["ttests", "test", "testest", "test"] }
实现代码
使用Array.prototype.reduce()完成归并,这是处理此类分组需求的高效方式:
const input = [/* 上述原始数组 */]; const groupedContent = input.reduce((acc, item) => { // 初始化对应stage的数组(如果不存在) acc[item.stage] ??= []; // 推入当前content acc[item.stage].push(item.content); return acc; }, {}); console.log(groupedContent);
代码说明
reduce方法:遍历数组,以空对象为初始值逐步构建结果。- 空值合并赋值运算符
??=:简化了“不存在则初始化空数组”的逻辑,比传统if判断更简洁。 - 时间复杂度:O(n),仅需遍历一次数组,性能最优。
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

