как я могу динамически получать переменные в javascript?

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я работаю над приложением React, но я думаю, что это, скорее всего, проблема JavaScript. У меня есть много переменных с шаблоном VARIABLE_NAME_{number} , примером и FOO_1, FOO_2 ... так далее. В моей функции он принимает индекс в качестве входных данных и возвращает отображенный вывод.

 import power from 'customClass';
const getOneOfFoo = (theIndex) => {
  power()
   .then(data => {
      let result = data?.first?.second?.FOO_{theIndex}?.name ; // how can I declare this one with passing input?
     // example, if theIndex=59, I want to have
     // let result = data?.first?.second?.FOO_59?.name;
      resolve({
          result: result
      });
     })
   .catch(err => console.log(err))
  });
 

Структура объекта данных выглядит следующим образом,

 data
 |-first
     |-second
         |-FOO_1
            |-name
         |-FOO_2
            |-name
         |-FOO_3
            |-name
         |-FOO_4
            |-name
         ...
 

В строке 5 я хочу назначить result динамически. Как я могу этого добиться?

Комментарии:

1. Если я правильно понял ваш вопрос, вы можете получить доступ к таким свойствам, как [] . Например, SomeObject[«SomeProperty»] или, в вашем случае, SomeObject[INDEX]

Ответ №1:

Вы можете обращаться с ним как со словарем. Вот пример:

 const data = {
  'FOO_1': { name: 'Kenobi' },
  'FOO_2': { name: 'Skywalker' },
  'FOO_3': { name: 'Yoda' },
  'FOO_4': { name: 'Kylo' },
  'FOO_5': { name: 'Sidious' }
}

function getVar(index) {
  let result = data?.[`FOO_${index}`]?.name;
  return resu<
}

console.log(getVar(1)); // expected output: Kenobi
console.log(getVar(2)); // expected output: Skywalker
console.log(getVar(3)); // expected output: Yoda
console.log(getVar(4)); // expected output: Kylo
console.log(getVar(5)); // expected output: Sidious
console.log(getVar(6)); // expected output: undefined 

Итак, в вашем случае это, вероятно, будет что-то вроде этого:

 import power from 'customClass';
const getOneOfFoo = (theIndex) => {
  power()
   .then(data => {
      let result = data?.first?.second?.[`FOO_${theIndex}`]?.name;
      resolve({
          result: result
      });
     })
   .catch(err => console.log(err))
  });
 

И, кстати, разрешение, похоже, не определено.

Ответ №2:

 let result = data?.first?.second[`FOO_${theIndex}`]?.name ;
 

вы можете использовать [] с внутренней строкой, которая является именем свойства

Комментарии:

1. Неправильный синтаксис. Предполагается, что let result = data?.first?.second?.[`FOO_${theIndex}`]?.name ;

2. я просто пробую один, и все в порядке,

3. Обратные ссылки для литералов шаблона НЕ смешиваются с обычными строками. Также смотрите Предложение TC39 для необязательной цепочки . Это выглядит примерно так: obj?.[index]