Devilz_1
@Devilz_1
Frontend-Developer

Как реализовать динамический ключ у свойства в объекте?

Всем привет!

Есть условный объект

export const CONST_NAMES= {
    CONST1: 'constanta 1',
    CONST2: 'constanta 2',
    CONST3: 'constanta 3',
    CONST4: 'constanta 4',
};


И есть объект второй объект:

export const CONST_NAMES_SORT = {
    [CONST_NAMES.CONST1 || CONST_NAMES.CONST3]: 'Odd',
    [CONST_NAMES.CONST2 || CONST_NAMES.CONST4]: 'Even',
};


При выводе в консоль например:

console.log(CONST_NAMES_SORT[CONST_NAMES.CONST3]);

Мы получаем undefined. Можно ли сделать второй объект более гибким, где ключ будет иметь условие "или"? Или нужно расписывать весь объект?

Ссыль на песочницу
  • Вопрос задан
  • 64 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сделайте console.log(CONST_NAMES_SORT) и всё увидите сами.
Ответ написан
WblCHA
@WblCHA
Насколько я понял, вы хотите, чтобы несколько ключей обращались к одному и тому же значению. Если да, то в жс, поскольку нельзя получить адрес строк, чисел и т.д., это невозможно.
Однако если значение является объектом или массивом, то там как раз передаётся ссылка и если изменять значения внутри объекта/массива, то ссылка на них не изменится.
const obj1 = { value: 'Odd' };
const obj2 = { value: 'Even' };
export const CONST_NAMES_SORT = {
  [CONST_NAMES.CONST1]: obj1,
  [CONST_NAMES.CONST3]: obj1,
  [CONST_NAMES.CONST2]: obj2,
  [CONST_NAMES.CONST4]: obj2,
};
CONST_NAMES_SORT[CONST_NAMES.CONST1].value = 'Not Odd';
console.log(CONST_NAMES_SORT[CONST_NAMES.CONST3].value); // > Not Odd


Короче говоря, невозможно, но есть пара исключений.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы