如何在javascript/typescript的枚举中检查字符串/数字是否存在?

3,758 阅读2分钟

Enum是Javascript/typescript中引入的一种新的数据类型,它只保存字符串或数字。

有些时候,有必要检查Enum对象中是否存在声明的字符串或数字。

这篇博文涵盖了在javascript typescript ,检查字符串或数字值是否存在于Enum中。

你可以查看我的其他关于类型化Enum对象的文章

检查字符串是否存在于Enum值中

我们有很多方法可以检查字符串是否存在于枚举中

使用ES7数组包括方法

ES7,最新的javascript语言引入了includes方法

enum WeekEndMap {
Sunday = "sunday",
Saturday = "saturday"
}

Object.values() 该方法是ES6的一种方法,它接受枚举或对象,并返回枚举字符串的数组,includes()方法简单地检查并返回true - 如果存在,false - 不存在。

const list=Object.values(WeekEndMap);
console.log(list)//[ 'sunday', 'saturday' ]
console.log(typeof list); // object
if (Object.values(WeekEndMap).includes('sunday')) {
console.log("string exists")
}

如果提供的值是数字,这个方法将不起作用。

如何检查数字在枚举中的存在,typecript/Javascript

让我们声明周的枚举

export enum Weeks {
    MONDAY = 1,
    TUESDAY= 2,
    WEDNESDAY = 3,
    THURSDAY = 4,
    FRIDAY = 5,
    SATURDAY=6,
    SUNDAY=7,
}

Enum被声明为包含数字值的字符串。

在typescript中,Enum对象的格式如下所示

key <--> value
value <-->  key

打印枚举对象,如下所示

{ '1': 'MONDAY',
  '2': 'TUESDAY',
  '3': 'WEDNESDAY',
  '4': 'THURSDAY',
  '5': 'FRIDAY',
  '6': 'SATURDAY',
  '7': 'SUNDAY',
  MONDAY: 1,
  TUESDAY: 2,
  WEDNESDAY: 3,
  THURSDAY: 4,
  FRIDAY: 5,
  SATURDAY: 6,
  SUNDAY: 7 }

数字可以通过多种方式在枚举中进行检查

  • 使用in操作符 Enum是一个对象,In operator ,如果属性存在于一个对象中,则返回真,否则返回假。
  • 枚举索引语法--如果数字存在,则返回字符串,否则返回未定义。
let numberValue=1
console.log(numberValue in Week) //true
console.log(Week[numberValue]) //MONDAY
console.log(Week[10])  // undefined
if (Week[numberValue]) {
  console.log("number exists")
}
if (!Week[10]) {
  console.log("number not exists")
}

和控制台输出是

true
MONDAY
undefined
number exists
number exists