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

如何遍历enum枚举为数组元素按枚举顺序依次赋值?

实现方案

你定义的是TypeScript默认的数字枚举,编译后会同时生成正向(成员名→数值)和反向(数值→成员名)映射,我们可以先提取按枚举定义顺序排列的有效值列表,再通过遍历索引匹配赋值即可。

步骤1:提取枚举值列表

// 提取按你定义顺序排列的枚举数值列表 [0,1,2,...] 对应green/red/blue...
const colourValues = Object.keys(Colours)
  // 过滤掉反向映射生成的数字类型key
  .filter(key => isNaN(Number(key)))
  .map(key => Colours[key as keyof typeof Colours]);

如果需要给colour赋值的是枚举名的字符串(比如'green'而非数字0),修改map逻辑即可:

const colourNames = Object.keys(Colours)
  .filter(key => isNaN(Number(key)));

步骤2:遍历数组按索引赋值

遍历数组时用元素索引匹配枚举列表的下标即可,以下示例加了取模逻辑,避免数组长度超过枚举长度时报错,如果你能保证数组长度小于等于枚举长度可以去掉% colourValues.length:

array.forEach((item, index) => {
  // 赋值枚举数值
  item.colour = colourValues[index % colourValues.length];
  // 如果要赋值字符串名称就用 colourNames[index % colourNames.length]
});

简化方案(仅适用固定顺序的连续数字枚举)

如果你确认你的枚举永远保持当前定义顺序、且是从0开始的连续数字枚举,可以直接省略第一步的枚举列表提取,直接把索引转为枚举类型即可:

array.forEach((item, index) => {
  item.colour = index as Colours;
});

注意:该方案强依赖枚举的定义顺序和值连续性,后续修改枚举定义(比如新增成员插在开头、调整成员顺序)会导致赋值逻辑出错,更推荐优先使用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:30:04