从枚举中获取枚举的钥匙



我有以下枚举

export enum Operators {
    Equal = "1",
    NotEqual = "2",
    GreatherOrEqual = "3",
    LessOrEqual = "4",
    Contains = "5",
    Null = "6",
    NotNull = "7",
    Between = "8",
    StartsWith = "9",
    EndsWith = "10"
}

我需要从存储的值中恢复枚举键。我创建了以下内容:

GetEnumTextByValue ( valueOperator: string ): string {
    const values: string[] = Object.values( Operators ).filter( v => v == v );
    const keys: string[] = Object.keys( Operators ).filter( k => k == k );
    const index: number = values.indexOf( valueOperator );
    return keys[ index ];
}

该功能返回我需要的东西,但是有什么简单的方法可以获取钥匙?

我正在为任何枚举使用此功能

export function getEnumKeyByEnumValue(myEnum: any, enumValue: number | string): string {
  let keys = Object.keys(myEnum).filter((x) => myEnum[x] == enumValue);
  return keys.length > 0 ? keys[0] : '';
}

使用开玩笑的测试

describe('enum', () => {
  enum TestEnumWithNumber {
    ZERO
  }
  enum TestEnumWithString {
    ZERO = 'ZERO'
  }
  it('should return correct key when enum has number values', function () {
    const key = getEnumKeyByEnumValue(TestEnumWithNumber, TestEnumWithNumber.ZERO);
    expect(key).toBe('ZERO');
  });
  it('should return correct key when enum has string values', function () {
    const key = getEnumKeyByEnumValue(TestEnumWithString, TestEnumWithString.ZERO);
    expect(key).toBe('ZERO');
  });
});

您可以使用Object.entriesMap的组合:

const operators = new Map(
  Object.entries(Operators)
    .map(entry => entry.reverse()) as [Operators, keyof typeof Operators][]
);
console.log(
  operators.get(Operators.Between) // Between
)

请注意,当您的枚举包含数字而不是字符串时,这更容易。

export enum Operators {
    Equal = 1,
    NotEqual = 2,
    GreatherOrEqual = 3,
    LessOrEqual = 4,
    Contains = 5,
    Null = 6,
    NotNull = 7,
    Between = 8,
    StartsWith = 9,
    EndsWith = 10
}
Operators[Operators.Between]; // "Between"

完美。谢谢保罗。我已经通过以下方式对其进行了修改:

GetEnumTextByValue ( valueOperator: string ): string {
    let operator: string;
    for ( let [ key, value ] of Object.entries( Operators ) ) {
        value === valueOperator ? operator = key : null;
    }
    return operator;
}

最新更新