TypeScript中按id过滤数组并合并tg属性为数组
TypeScript按ID分组合并属性实现
需求描述
给定指定结构的对象数组,按id分组,将同一id对应的所有tg属性值合并为数组,最终得到去重分组后的结果数组。
原始数据
interface OriginalItem { id: number; name: string; tg: string; } const originalData: OriginalItem[] = [ { id: 101, name: 'Alex', tg: 'REV006' }, { id: 101, name: 'Alex', tg: 'REV002' }, { id: 101, name: 'Alex', tg: 'REV001' }, { id: 104, name: 'Dave', tg: 'REV003' }, { id: 101, name: 'Alex', tg: 'REV005' }, { id: 108, name: 'Arun', tg: 'REV005' }, ];
实现代码
先定义分组后的数据类型,再通过reduce方法完成分组逻辑:
interface GroupedItem { id: number; name: string; tg: string[]; } const groupedData: GroupedItem[] = Object.values( originalData.reduce((acc, item) => { const key = item.id; // 首次遇到该id时初始化分组对象 if (!acc[key]) { acc[key] = { id: item.id, name: item.name, tg: [] }; } // 追加当前tg值到分组数组,如需去重可添加判断:!acc[key].tg.includes(item.tg) acc[key].tg.push(item.tg); return acc; }, {} as Record<number, GroupedItem>) );
输出结果
执行后得到的groupedData即为目标格式:
[ { id: 101, name: 'Alex', tg: ['REV006','REV002','REV001','REV005'] }, { id: 104, name: 'Dave', tg: ['REV003'] }, { id: 108, name: 'Arun', tg: ['REV005'] } ]
内容的提问来源于stack exchange,提问作者user3933327
相关产品推荐
相关产品推荐

