检查枚举中定义的项目

时间:2017-07-18 17:48:04

标签: javascript enums

我有一个枚举,我在其中存储了一些如下所示的UI元素值:

const uiElementAttributes = {
   1: {
      id: 1,
      color: 'red',
      icon: 'icon-something.png'
   },
   2: {
      id: 2,
      color: 'yellow',
      icon: 'icon-something-else.png'
   },
   3: {
      id: 3,
      color: 'blue',
      icon: 'icon-this-item.png'
   },
   99: {
      id: 99,
      color: 'black',
      icon: 'icon-black.png'
   }
};

我有一个函数,它将根据传递给我的函数的id从枚举中返回正确的对象。我的问题是如何检查枚举中是否定义了值?

这里的功能是:

const getAttributes (id) => {

   // How do I check to see if the id is in the enum?
   if(checkIfIdIsInEnum) {
      return uiElementAttributes[id];
   } else {
      return uiElementAttributes[99];
   }

};

更新:我正在尝试建议的答案。它确实看起来非常简单,但看起来当webpack将我的代码转换为vanilla JS时,它会在default enum的末尾添加undefined。知道可能导致这种情况的原因 - 见下文?正如您所看到的,我传递的id值为1,因此它应该能够在我的枚举对象中找到值1.

enter image description here

这是实际的enum对象: enter image description here

这是实际的功能代码: enter image description here

更新2: 我通过在花括号中导入枚举来解决了这个问题 - 见下文:

import {calendarEvents} from '../../enums/calendarEvents';

1 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您可以访问该属性,如果结果为false,则采用默认属性99

const getAttributes = id => uiElementAttributes[id] || uiElementAttributes[99];

否则,您可以使用in operator或建议的Object#hasOwnProperty