Динамическое имя вызываемого массива
Скажите, уважаемые эксперты, а как можно в JS массив по изменяемому имени. Есть ли что-то подобное тому, что есть для регулярных выражений?
var reg = new RegExp("ИскомыйТЕКСТ", "ФЛАГИ") То есть как я себе представляю эту функцию: Аrray("ИмяМассива", "ИНДЕКС") Например: var MBD = [] var array_name = MBD // ситуативное Аrray(array_name, "5") // вместо "MBD[5]" в данном случае. То есть в данном месте кода может оказаться абсолютно любой по имени (из уже ранее объявленных) массив. |
Лучший вариант — хранить данные (массивы) в объекте:
var data = { abc: […], bcd: […], cde: […] }; тогда обращение к свойству объекта (массиву) будет осуществлятся следующим образом: data["abc"] К глобальным массивам можно обратится так: var abc = […], bcd = […], cde = […]; window["abc"] Для локальных областей можно использовать eval, но лучше так не делать: eval("var array = abc;"); Вообще это основы JavaScript, читайте теорию. |
Первый случай очевидный - именно так и делаю.
Третий (использование eval) - так и не понял. А вариант с window - то, что доктор прописал. Спасибо, Octane. |
Цитата:
Только почему здесь вместо конкретного имени ("abc") не может быть вычисляемой переменной? В Tcl было все так удобно и лаконично... :( Хотелось бы чего-то наподобие: Код:
Не могу понять почему подобное не работает, хотя бы в виде: Код:
Эту задачу я, в принципе, мог бы решить и на одних регулярных выражениях, но мне сейчас интересно как это могло бы выглядеть в JS на массивах. |
Цитата:
Следовало так (может кому и пригодится): Код:
Самое странное, что как-то в примерах мануалов подобных удобных примеров не было! Может быть для кого-то это очевидно, но скорее для самого автора мануала :) Было б здорово, если б у кого-то дошли руки описать подобные трюки. |
Цитата:
У вас проблемы с архитектурой приложения, раз так приходится обращаться к массивам. |
Цитата:
Я достаточно слеп, чтобы делать только то и так, как это я сейчас делаю. Но буду благодарен, всякому кто направит меня "на путь истинный". :help: В Tcl'е - так там вышепреведенный способ используется сплошь и рядом. Как надо делать в JS - к сожалению, не знаю. |
Цитата:
Цитата:
|
Этот пример я вполне понял.
Возможно, на первый взгляд, я умножаю сущности, но в моем примере имя массива (или подмассива) заранее не известно, а выводится в процессе выполнения кода (что я и называю "динамическим получением" его имени), потому что зависит от ряда условий. Можно, наверное, переписать все как многомерный массив, но я боюсь, что достигнув этим некоторой компактности, я сам запутаюсь. А читабельность и "прозрачность" кода (по крайней мере для меня) - важны. |
Куча глобальных переменных — зло.
Цитата:
data["имя" + "массива"][индекс_элемента_в_массиве] или var data = { abc: [7,8,22], bcd: [8] }; var cde = ["mbp", "abc", "bcd"]; data[cde[1]][2] // ==> 22 Цитата:
|
Часовой пояс GMT +3, время: 16:53. |