Можно ли использовать строку в качестве имени для массива?Указатель строк на массив
var myArray = ["a","b","c"];
var myPointer = "myArray";
console.log(myPointer[1]); //Should return "b"
Можно ли использовать строку в качестве имени для массива?Указатель строк на массив
var myArray = ["a","b","c"];
var myPointer = "myArray";
console.log(myPointer[1]); //Should return "b"
Да, вы можете это сделать. Я знаю несколько способов.
Первый должен был бы использовать 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: как отмечено в комментариях на других постах, это не совсем указатель. Я предполагаю, что вы хотите динамически определить, какой массив вы хотите использовать на основе строкового значения.
Я собирался указать «eval» и указать, чтобы не использовать его, вы избили меня! – Shaded
Просто для дальнейшего расширения - вы можете ссылаться на любой член любого объекта, используя строку. Итак, если у вас есть '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 говорит, что вам просто нужно, чтобы какой-то объект содержал массив. –
Примитивные типы, в первую очередь строки/номера/булевы передаются по значению для целей эффективности. Такие объекты, как функции, объекты, массивы и т.п., передаются по ссылке.
Таким образом, вы можете сделать это объект, а затем использовать ссылки на него.
См. this question.
Надежда, что помогает :)
Я не уверен, почему вы хотели бы сделать это, но вы можете использовать объект массивов для этого.
var myArray = ["a","b","c"];
var myObject = {"myArray": myArray};
var myPointer = "myArray";
console.log(myObject[myPointer][1]);
Я не знаю, почему в вашем примере это будет возвращать «б» ... Но я думаю, что лучший подход к вашему вопросу будет использовать словарь, на самом деле это довольно общая структура данных в JS.
так что в вашем случае:
var myPoint = {
'a': 'm',
'b': 'y',
'c': 'p',
}
и так далее ..
этот ответ может помочь вам http://stackoverflow.com/questions/8630471/strings-as-keys-of- array-in-javascript –
Вы назначаете строку myPointer, а не массив. – brbcoding