2012-03-30 3 views
3

Я следующие переменные:JQuery Преобразовать строку в объект без Eval()

var opday = [], 
     opcategory = [], 
     opbarrio = []; 

Тогда у меня есть в другом месте:

 var myparent = $me.parent().attr('data-filter-group'); 

Предположив myparent возвращается «категория», как я могу создать объект из этой строки, который ссылается на переменную opcategory ??

Например:

var myarray = "op" + myparent; 

Так что я мог бы использовать этот объект как так:

alert(myarray[2]); 

Спасибо!

+0

Привет, есть ли причина, по которой вы не хотите использовать 'eval()'? Поскольку вы используете jQuery, вы можете использовать [globalEval] (http://api.jquery.com/jQuery.globalEval/) – NoLifeKing

+0

люди говорят мне, что это зло –

+0

'eval()' не злой, для чего у меня есть слышал. Если вы используете его правильно и только на входе, которое вы подтвердили правильно, это не так уж плохо. Я имею в виду .. Если у кого-то есть доступ к firebug, они могут использовать 'eval()' на любом сайте, который они могут захотеть, потому что у них есть консоль, которая запускает javascript для них. :) – NoLifeKing

ответ

2

Вы можете обратиться к переменным, объявленным в глобальном масштабе, как:

var myCustomVar = "my value" 
, nameOfVar = "myCustomVar" 
alert(this[nameOfVar]) 
// you get "my value" 

Однако, это не будет работать, если вы будете придерживаться его внутри функции:

var answer = (
    function(){ 
     var myvar = "the value" 
     return this["myvar"] 
    } 
).call({}) 
// answer will be 'undefined' 

Явное связывание область вары с this работает:

var answer = (
    function(){ 
     this.myvar = "the value" 
     return this["myvar"] 
    } 
).call({}) 
// 'answer' will be "the value" 
3

Я думаю, что объект является лучшим решением для этого:

var op = { 
    day: [], 
    category: [], 
    barrio: [] 
}; 

Что вы можете ссылаться, как это:

var myarray = op[myparent]; 

Там также менее элегантен (читай: зло и Hacky) решение, работает только в том случае, если opday, а остальные - глобальные переменные. Все глобальные переменные свойства window объекта, который позволяет динамически создавать и переменные доступа:

var myarray = window["op" + myparent]; 
2

Если вам необходимо получить доступ к глобальной переменной по имени, любым способом, сделайте это:

var myarray = window["op"+myparent]; 

но было бы намного лучше положить все их в карту .