2013-09-19 2 views
2

Можно ли использовать строку в качестве имени для массива?Указатель строк на массив

var myArray = ["a","b","c"]; 
var myPointer = "myArray"; 

console.log(myPointer[1]); //Should return "b" 
+0

этот ответ может помочь вам http://stackoverflow.com/questions/8630471/strings-as-keys-of- array-in-javascript –

+1

Вы назначаете строку myPointer, а не массив. – brbcoding

ответ

3

Да, вы можете это сделать. Я знаю несколько способов.

Первый должен был бы использовать eval(), но я не буду обсуждать его, так как я думаю, что eval() является злым.

Один из способов сделать это - узнать, какую область вы используете. Если вы используете область window, вы всегда можете сделать window[myPointer][1]. Если вы используете другую область, это так же просто, как и scope[myPointer][1].

Если вы не имеете рамки или не хотят отравить рамки окна, вы всегда можете использовать что-то вроде этого:

function blork (pointer) { 
    var arrays = { 
     number : [ 0, 1, 2, 3, 4, 5 ], 
     letters : [ 'a', 'b', 'c', 'd', 'e' ] 
    } 
    return arrays[pointer]; 
} 

Edit: как отмечено в комментариях на других постах, это не совсем указатель. Я предполагаю, что вы хотите динамически определить, какой массив вы хотите использовать на основе строкового значения.

+1

Я собирался указать «eval» и указать, чтобы не использовать его, вы избили меня! – Shaded

+0

Просто для дальнейшего расширения - вы можете ссылаться на любой член любого объекта, используя строку. Итак, если у вас есть 'var obj = {letters: ['a', 'b', 'c'], числа: ['1', '2', '3']};' вы можете добраться до массивов используя 'obj.letters' и' obj.numbers', или эквивалентно, используя 'obj [" letters "]' и 'obj [" numbers "]'. Таким образом, вы также можете иметь 'var pointer =" буквы "' и обращаться к 'obj [pointer] [1]', чтобы получить '' b''. В отношении scoping @MrP говорит, что вам просто нужно, чтобы какой-то объект содержал массив. –

0

Примитивные типы, в первую очередь строки/номера/булевы передаются по значению для целей эффективности. Такие объекты, как функции, объекты, массивы и т.п., передаются по ссылке.

Таким образом, вы можете сделать это объект, а затем использовать ссылки на него.

См. this question.

Надежда, что помогает :)

2

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

var myArray = ["a","b","c"]; 
var myObject = {"myArray": myArray}; 
var myPointer = "myArray"; 
console.log(myObject[myPointer][1]); 
0

Я не знаю, почему в вашем примере это будет возвращать «б» ... Но я думаю, что лучший подход к вашему вопросу будет использовать словарь, на самом деле это довольно общая структура данных в JS.

так что в вашем случае:

var myPoint = { 
    'a': 'm', 
    'b': 'y', 
    'c': 'p', 
} 

и так далее ..

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