2010-05-16 3 views
2

У меня есть несколько массивов js, и я хочу найти массивы по имени. например:Javascript: найти массив по имени

arr1 = [1,2,3]; 
arr2 = [3,4,5]; 

И доступ к ним, как это:

var intNum = 2; 
var arrName = 'arr' + intNum; 

arrName[0]; // equals 3 

Возможно ли это?

Спасибо, Kevin

ответ

3
window['arr'+intNum] 

так

arr1 = [1,2,3]; 
arr2 = [3,4,5]; 
intNum=2; 
alert(window['arr'+intNum][1]); //will alert 4 
+1

Следует отметить, что это не доступ к массиву, это доступ к объекту. Не говоря уже о том, что этот пример работает только в том случае, если массивы находятся в глобальной области. – Matt

+0

Мне нужно дать этот ответ тик, как это был метод, который я использовал. В принципе, у меня были массивы, которые были созданы в документе, поэтому они были в глобальном масштабе. Должен дать кивнуть Шон Кинси (и обсуждение) для более надежного решения, а также помочь мне понять, что я использую. Спасибо всем. –

5

Это возможно, но я хотел бы предложить вам разместить эти массивы в качестве свойств объекта, что делает его намного проще

var arrays { 
    arr1 : [1,2,3], 
    arr2 : [4,5,6] 
} 

var arrNum = 2; 
var arr = arrays["arr" + arrNum] // arrays.arr2 

Свойства объектов могут быть доступны как с помощью . и названные элементы, используя нотацию ["propname"].

Использование eval или использование вышеуказанного трюка на window не рекомендуется.

Eval'ing обычно является признаком плохо сконструированного кода, а использование окна зависит от того, что Window является переменным объектом глобальной области действия - это не часть какой-либо спецификации и не обязательно будет работать в разных браузерах.

+0

Почему окно «трюк» не рекомендуется (я уверен, что все основные разработчики FW в мире js хотели бы знать это) –

+0

Потому что вы полагаетесь на окно, являющееся объектом переменной глобального масштаба - это не часть каких-либо spec и не обязательно будут работать в браузерах. –

+0

Если вы беспокоитесь о том, что 'window' не является глобальным объектом, вы можете вызвать автономную функцию, которая просто возвращает' this'. Конечно, в этот момент было бы лучше просто использовать ваше предложение и поместить их в объект. –

Смежные вопросы