#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]