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

如何获取TypeScript Enum的标签,结合传入枚举值匹配API数据生成数据集

问题根源

你定义的Filtros是字符串枚举,当你传入Filtros[]类型的数组时,每个filtro变量本身就是枚举的value值(比如Filtros.Ligacoes对应的值就是"Ligações"字符串),不存在可以读取的键名属性,而且API返回的字段名和枚举值/键名都不直接匹配,所以需要先建立映射关系。

实现方案

第一步:定义枚举到API字段的映射表

提前建立映射关系,避免运行时做字符串转换出错(比如重音符号、大小写处理异常):

export enum Filtros {
  Ligacoes = "Ligações",
  Tempo = "Tempo em chamada (min)",
  Email = "E-mails enviados",
  Reuniao = "Reuniões agendadas",
}

// 枚举值对应API返回的字段名
const FILTRO_TO_API_KEY: Record<Filtros, string> = {
  [Filtros.Ligacoes]: 'ligações',
  [Filtros.Tempo]: 'tempo',
  [Filtros.Email]: 'emails',
  [Filtros.Reuniao]: 'reuniões',
}

第二步:重写数据集生成函数

// 先定义API返回数据的TS类型
interface RawApiItem {
  nome: string;
  ligações: number;
  tempo: number;
  emails: number;
  reuniões: number;
  negocios: number;
  valorTotal: number;
  ticketMedio: number;
  backgroundColor: string;
}

interface DataSetResult {
  label: string;
  data: number[];
}

function makeDataSets(filtros: Filtros[], rawApiData: RawApiItem[]): DataSetResult[] {
  return filtros.map(filtro => {
    // 直接从映射表取对应API字段
    const apiField = FILTRO_TO_API_KEY[filtro];
    // 遍历原始数据提取对应字段值
    const data = rawApiData.map(item => item[apiField as keyof RawApiItem]);
    return {
      label: filtro,
      data: data
    }
  })
}

调用示例

// 假设你从API拿到的原始数据是dataSet
const result = makeDataSets([Filtros.Ligacoes, Filtros.Tempo], dataSet);

优化建议

  • 不要在函数内部依赖外部变量(比如你原来的myObj),把原始数据作为参数传入,提高函数复用性和可测试性
  • 不要在循环外声明data变量,避免多次遍历导致数据污染
  • 给所有变量加上TS类型定义,提前发现类型错误
  • 避免嵌套循环+全量Object.entries遍历,用预定义映射表直接取值的性能提升非常明显

内容的提问来源于stack exchange,提问作者rafaelpadu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:51:03