Передать / получить несколько значений Enum в Typescript?

Передайте значение, которое является комбинацией значений перечисления, и получите соответствующие строки перечисления.

Вот мой сценарий,

enum EnumDays {
    NONE = 0,
    SUN = 1,
    MON = 2,
    TUE = 4,
    WED = 8,
    THU = 16,
    FRI = 32,
    SAT = 64,
    ALL = 127
}

Я передам значение как 5, которое является комбинацией SUN & TUE (1 + 4 = 5).

Я хочу получить "SUN" и "TUE" в результате. Как этого добиться?

1 ответ

Это может быть сделано либо путем перебора битов, либо путем перебора элементов перечисления. Перебор битов кажется немного чище. Мы пользуемся тем фактом, что EnumDays сопоставляет значения с ключами (например, 1 в SUN) а также ключи к значениям (SUN в 1). (Nit: этот подход не найдет значение enum 2147483648, 1 << 31, который -2147483648, буду работать.)

function getDayNames(value: EnumDays) {
    let names = [];
    for (let bit = 1; bit != 0; bit <<= 1) { 
        if ((value & bit) != 0 && bit in EnumDays) { 
            names.push(EnumDays[bit]);
        }
    }
    return names;
}
Другие вопросы по тегам