如何按唯一prv_codigo合并数组对象:拼接agrupaciones并保留首个icon
数组分组与属性拼接实现方案
需求说明
将原始数组按prv_codigo分组,同一组的tagrupaciones拼接为逗号分隔的字符串,保留每组第一个出现的icon,最终得到由唯一对象组成的数组。
原始数组
const results: any[] = [ { prv_codigo: 1, tagrupaciones: 'apple', icon: 'fruit' }, { prv_codigo: 1, tagrupaciones: 'pinia', icon: 'tropical_fruit' }, { prv_codigo: 1, tagrupaciones: 'melon', icon: 'fruit' }, { prv_codigo: 1, tagrupaciones: 'banana', icon: 'tropical_fruit' }, { prv_codigo: 2, tagrupaciones: 'apple', icon: 'fruit' }, ];
实现方案一:使用reduce遍历处理
const newResults = results.reduce((acc, current) => { const existingItem = acc.find(item => item.prv_codigo === current.prv_codigo); if (existingItem) { existingItem.tagrupaciones += `,${current.tagrupaciones}`; } else { acc.push({ prv_codigo: current.prv_codigo, tagrupaciones: current.tagrupaciones, icon: current.icon }); } return acc; }, [] as any[]);
实现方案二:使用Map优化性能(适合大数据量)
const groupMap = new Map<number, any>(); results.forEach(item => { const key = item.prv_codigo; if (!groupMap.has(key)) { groupMap.set(key, { prv_codigo: key, tagrupaciones: item.tagrupaciones, icon: item.icon }); } else { const targetItem = groupMap.get(key); targetItem.tagrupaciones += `,${item.tagrupaciones}`; } }); const newResults = Array.from(groupMap.values());
最终结果
两种方案均会得到目标数组:
[ { prv_codigo: 1, tagrupaciones: 'apple,pinia,melon,banana', icon: 'fruit' }, { prv_codigo: 2, tagrupaciones: 'apple', icon: 'fruit' } ]
内容的提问来源于stack exchange,提问作者tsiPlus
相关产品推荐
相关产品推荐

