Как я создаю enum из массива? - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужно сгенерировать enumErrorList как этот

Errors={
    none:0,
    subject:1,
    content:2,
    sender:4,
    recipient:8
}

из массива, подобного этому

let errors=[
        'none',
        'subject',
        'content',
        'sender',
        'recipient'
]

, но мне жаль, я не очень знаком с enum.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Используйте Object.entries и Object.fromEntries следующим образом

let errors=[
        'none',
        'subject',
        'content',
        'sender',
        'recipient'
]

let Errors = Object.fromEntries(Object.entries(errors).map(([a,b]) => [b, ((1<<a)>>1)]));
console.log(Errors)
1 голос
/ 13 апреля 2020

Вы можете взять массив, затем использовать Array#reduce и Object.assign, чтобы сгенерировать объект там, где:

  • Ключ - это элемент из массива.
  • Значение увеличивается на степень 2, начиная с нуля.

let errors=[
        'none',
        'subject',
        'content',
        'sender',
        'recipient'
]

const Errors = errors.reduce(
  (acc, item, index) => Object
    .assign(
      acc, 
      {[item]: Math.floor(2 ** (index - 1))}
    ), 
  {}
)

console.log(Errors)

Или с помощью арифметического бита c для получения степеней 2 только путем установки бита n-1, начиная с 0, когда n=0:

let errors=[
        'none',
        'subject',
        'content',
        'sender',
        'recipient'
]

const Errors = errors.reduce(
  (acc, item, index) => Object
    .assign(
      acc, 
      {[item]: (1 << index) >> 1}
    ), 
  {}
)

console.log(Errors)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...