You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:27:34