Javascript: имя массива в виде строки; Нужно, чтобы он ссылался на фактический массив

Мне нужно "получить доступ" к массиву, но все, что у меня есть, это строка, соответствующая имени массива. Очевидно, что такого рода вещи не будут работать, но это показывает, что я пытаюсь сделать:

var arrayname = new Array(1, 2, 3);
var array = 'arrayname';

Alert(array[0]);

Конечно, приведенный выше пример дает «а» вместо 1, как мне нужно.

Предыстория заключается в том, что я работаю с информационной панелью Hyperion Business Intelligence, где используемый массив определяется подстрокой имени кнопки, которая использовалась для ее вызова.


person undrline - Reinstate Monica    schedule 29.04.2013    source источник
comment
Где ссылка на массив? Является ли это свойством какого-либо объекта. Надеюсь, вы не говорите мне, что это глобальная переменная!   -  person Brandon    schedule 29.04.2013
comment
Это поможет: переменная, используя строку, содержащую ее имя"> stackoverflow.com/questions/1664282/   -  person tymeJV    schedule 29.04.2013
comment
Спасибо за перелистывание страниц tymeJV :) Я искал, но подходящие ключевые слова ускользали от меня, а в автоматических результатах их не было. Это почти мой тот же вопрос. В моем макете похоже, что eval() — это то, что я искал, но мне нужно применить его на практике. Спасибо!   -  person undrline - Reinstate Monica    schedule 29.04.2013
comment
@epascarello они пытаются выполнять с ним операции, а затем присваивают значение существующему объекту. Он похож, но не дубликат.   -  person undrline - Reinstate Monica    schedule 29.04.2013
comment
Не используйте eval. Это просто не нужно. Если это глобальная переменная, используйте window решения ниже. Если нет, то не используйте переменную для хранения массива. Используйте переменную для хранения и объекта, и пусть объект хранит массив, чтобы вы могли правильно использовать строку для его извлечения.   -  person    schedule 29.04.2013
comment
... как решение alex23   -  person    schedule 29.04.2013
comment
@EdwardD, это то же самое. alert(window[array][0]); С одним и тем же вопросом около 50 дублей. Я просто выбрал один из них.   -  person epascarello    schedule 29.04.2013
comment
Не знаю, почему люди так недовольны eval(). Кажется, это как-то связано с тем, является ли мое использование глобальным или локальным. Это глобальная функция, но она частная для этой функции, между прочим. eval() отлично работает для моих нужд. Возможно, это не правильное решение, но я не вижу, чтобы оно создавало проблемы в дальнейшем. Опять же, это не для использования в Интернете, а для панели мониторинга в клиенте бизнес-аналитики, у которого есть собственный подход к javascript. Не знаю, кого пометить как ответившего, так как ни один из них не будет работать в моей среде.   -  person undrline - Reinstate Monica    schedule 29.04.2013


Ответы (3)


Это очень просто.

var storage = {};
storage.arrayname = [1, 2, 3];
alert(storage["arrayname"].join(','));

Настоятельно не рекомендуется загрязнять глобальное пространство имен. Я настоятельно рекомендую вам воздержаться от использования объекта window для этой цели. Подробнее читайте ЗДЕСЬ.

person flavian    schedule 29.04.2013
comment
Я думаю, что это похоже на ответ @pscoder, но создает что-то другое, кроме окна для использования. Все еще кажется неудобным и сложным для моих целей, но, возможно, я вернусь к этому. - person undrline - Reinstate Monica; 29.04.2013
comment
@EdwardD: Это не неудобно и не сложно. Это просто простой объект, и это правильное решение. Вы можете сократить его до var obj = {arrayname: [1,2,3]}; Затем войдите как obj[array][0]; - person ; 29.04.2013

Попробуйте использовать объект window, чтобы получить его, если он определен в контексте окна.

var array = window["arrayname"]
person PSL    schedule 29.04.2013
comment
К сожалению, у Hyperion нет окна или документа, который я мог бы вызвать в их версии Javascript. - person undrline - Reinstate Monica; 29.04.2013

Ты можешь использовать

array = window['arrayname'];
person walid    schedule 29.04.2013