Как назвать переменную со значением другой переменной? JS

1

Есть ли способ вызвать переменную, основанную на значении другой переменной, которая не всегда одинакова?

Пример:

var color = 'black';
var [color] = 'whatever'; // the variable name here would be 'black'

Причина использования: В редукторе Redux я получаю действие, которое имеет определенное значение

export default (state = INITIAL_STATE, action) => {
const { size, color, object } = action;
switch (action.type) {
    case (DO_SOMETHING): {
    // instead of name 'output' below, I want to have a value of 'color' 
        let output = object;
        if (size) { 
            output = callExternalFunction(output, size);
        }
        return { ...state, [color]: output };
    }

Моя цель: если это возможно, я смогу вернуться к этому:

return { ...state, [color] };
Теги:
string
redux

2 ответа

1

Вы можете использовать для этого объект window. Попробуй это:

var color = 'black';
window[color] = 'whatever';
alert(black);

Редактировать:

Как сказал @Tavish Aggarwal, это сделает переменную global, если вы действительно не хотите, чтобы вы могли использовать eval().

Но eval - это зло, как говорится, поэтому я не рекомендую его.

  • 0
    Кажется, работает, но это разумный и практичный способ сделать ради простой конденсации кода?
  • 2
    @Eduard - прикрепление переменной к окну не очень хорошая практика. Как это делает его глобальной переменной.
Показать ещё 4 комментария
0

Почему бы просто не использовать объект для хранения имен переменных? Например:

var color = 'black',
    variables = {};

variables[color] = 'whatever'; // { black : 'whatever' }

return { ...state, variables['black'] } // { ...state, 'whatever' }

Это соответствует вашим потребностям? Возможно, я неправильно понял вопрос

  • 0
    Единственная цель этой борьбы - просто сократить размер кода на несколько символов. И ваше решение не достигает этого.
  • 0
    О, так твой код работает, но ты просто хотел сделать его короче? Я не понял вашу точку зрения тогда.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню