Javascript определяет строковые константы как сокращенные свойства - PullRequest
1 голос
/ 15 апреля 2019

Есть ли способ определить строковое значение, например сокращенное свойство, например, (это не работает):

const dict = {
    USER_LOGIN,
    USER_LOGOUT
};

Что будет эквивалентно:

const dict = {
    USER_LOGIN: "USER_LOGIN",
    USER_LOGOUT: "USER_LOGOUT"
};

Я хочу определить словарь констант, но мне было интересно, смогу ли я как-нибудь избежать шаблона повторения MYVALUE : "MYVALUE".

Есть ли какой-нибудь сокращенный способ объявления ключей объекта со значениями, эквивалентными их строковым значениям, аналогичнок (не работающему) коду выше?

Ответы [ 4 ]

3 голосов
/ 15 апреля 2019

Нет встроенного способа сделать что-то подобное автоматически, но если вы хотите сохранить код DRY, вы можете создать вспомогательную функцию, которая при передаче массива строк создает объект со следующими свойствами:

const makeDict = arr => arr.reduce((a, str) => ({ ...a, [str]: str }), {});
const dict = makeDict(['USER_LOGIN', 'USER_LOGOUT']);
console.log(dict);
1 голос
/ 15 апреля 2019

Сокращенное обозначение свойства будет работать, только если у вас есть переменная, имя которой совпадает со свойством, которое вы хотите объявить:

const USER_LOGIN = 'USER_LOGIN';
const USER_LOGOUT = 'USER_LOGOUT';

const dict = {
    USER_LOGIN,
    USER_LOGOUT
};

console.log(dict);

В противном случае вы должны указать весь объект:

const dict = {
    USER_LOGIN: "USER_LOGIN",
    USER_LOGOUT: "USER_LOGOUT"
};

Или создайте его через помощника, как упоминалось @CertainPerformance.

1 голос
/ 15 апреля 2019

Вы можете объявить их и использовать эти константы как key-value для объекта.

const USER_LOGIN = "USER_LOGIN";
const USER_LOGOUT = "USER_LOGOUT";  

const dict = { USER_LOGIN, USER_LOGOUT };

console.log(dict);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 15 апреля 2019

Шучу:

let dict;

with(new Proxy({}, {
  get(_, key) { return key; },
  has(_, key) { return key !== "dict"; }
})) {
  dict = {
    USER_LOGIN,
    USER_LOGOUT
  };
}

console.log(dict);

Если вы думаете , что не работает ... просто попробуйте :))

А если серьезно: весь вопрос просто перебор.

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