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

如何在TypeScript中按字符串/枚举数组字段对对象列表进行分组

实现代码

// 定义输出结果的类型
type GroupedDishes = Record<keyof typeof TypeOfMeal, Array<Omit<Dish, 'category'> & { category: string[] }>>

// 初始化结果对象,预先填充所有分类对应的空数组
const groupedResult = Object.values(TypeOfMeal)
  .filter(val => typeof val === 'string')
  .reduce((acc, mealType) => {
    acc[mealType as keyof typeof TypeOfMeal] = []
    return acc
  }, {} as GroupedDishes)

// 遍历所有菜品完成分组
dishes.forEach(dish => {
  // 先把当前菜品的category枚举转成字符串数组
  const convertedCategory = dish.category.map(mealEnum => TypeOfMeal[mealEnum])
  const processedDish = {
    name: dish.name,
    category: convertedCategory
  }
  // 每个所属分类都添加当前菜品
  convertedCategory.forEach(mealType => {
    groupedResult[mealType as keyof typeof TypeOfMeal].push(processedDish)
  })
})

逻辑说明

  • 利用TS数字枚举的反向映射特性,TypeOfMeal[mealEnum]可以直接拿到枚举值对应的字符串名称
  • 遍历菜品时先统一转换category字段的枚举值为字符串,避免重复计算
  • 属于多个分类的菜品会自动添加到所有对应分类的数组中,完全匹配你给出的输出要求
  • 如果后续你把枚举改为字符串枚举,只需要把convertedCategory的转换逻辑调整为直接返回枚举值即可,当前代码适配你给出的默认数字枚举场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:04