Использование переменной для присвоения имени другой переменной javascript - PullRequest
1 голос
/ 03 апреля 2020

В процессе создания бот-диска, использующего node.js и дискорд. js, я пришел к моменту, когда я хочу создать новую переменную, в данном случае объект с одним свойством (строка "). server "и некоторая строка для значения.) Чтобы назвать упомянутую новую переменную, я хочу использовать идентификатор сервера, на который я ссылаюсь, который хранится в другой переменной. Как я могу это сделать?

До сих пор я пробовал eval("var " + serverID + " = {'server': 'test'}"), что дало мне синтаксическую ошибку: недопустимый / неожиданный токен на втором знаке плюса (замена объекта на строку все еще дала мне такая же ошибка). Везде, куда я смотрел, не помогло объяснить, что не так с функцией eval, и я запутался, как бы я сделал это по-другому.

В случае, если первое, что пришло на ваш взгляд, была реструктуризация того, как я работаю с переменными и типами, которые я использую, независимо от того, что эти выходные данные должны позволить мне добавить больше информации к этой переменной, что, по крайней мере, на мой взгляд, ограничивает меня использованием объектов и добавлением свойств. Я также сохраняю эту переменную в файле JSON позже в коде, который также ограничивает меня в использовании массивов или объектов.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2020

Я собираюсь догадаться, что eval завершится неудачно, потому что ваш serverID является числом (или строкой, представляющей число), поэтому оператор будет выглядеть как var 123 = {'server': 'test'}, что приведет к синтаксической ошибке.

В любом случае, простой альтернативой будет создание свойства объекта вместо переменной. Что-то вроде:

var myVariables = {};
//...
myVariables[serverID] = {'server': 'test'};

Вы даже можете добавить его к объекту global, если это имеет смысл для вашей ситуации и вам действительно нужна глобальная переменная.

0 голосов
/ 03 апреля 2020

Ваш синтаксис правильный, хотя вы можете убедиться, что идентификатор вашего сервера является допустимым JavaScript идентификатором.

var serverID = "asddkjkisdf";
eval("var " + serverID + " = {'server': 'test'}")

console.log(asddkjkisdf);

Однако я бы порекомендовал создать структуру данных, например, массив объектов для хранения этой информации. В этом случае вам не придется беспокоиться о значении идентификатора вашего сервера. Например,

[{id: 'asdfasdf', server: 'test'}, ... ]
0 голосов
/ 03 апреля 2020

Нет веских причин хранить переменную в качестве имени другой переменной. Как вы упомянули, самый простой способ выполнить sh то, что вы хотите, - это сохранить serverID в объекте.

...