p2kmgcl
3/16/2017 - 10:19 AM

Creates a JavaScript enum object

Creates a JavaScript enum object

const createEnum = (...names) => {
  const elements = {};
  const realEnum = {};

  names.forEach((name) => { elements[name] = Symbol(name); });
  realEnum.all = () => Object.assign({}, elements);
  realEnum.has = (element) => Object.values(elements).indexOf(element) !== -1;
  Object.entries(elements).forEach(([key, value]) => { realEnum[key] = value; });
  Object.freeze(realEnum);
  return realEnum;
};

// Usage

const colors = createEnum(
  'BLUE',
  'GREEN',
  'RED'
);

const blue = colors.BLUE;
const red = 'RED';

colors.has(blue); // true
colors.has(red); // false
colors.all(); // { BLUE: Symbol(), GREEN: Symbol(), RED: Symbol() }