2013-05-03 2 views
1

У меня есть две переменные, одна содержит дополнительную информацию об объекте и называется extra_info + идентификатор объекта. Другой содержит имя этой переменной:Доступ к содержимому переменной, имя которой находится в другой переменной

selector = 'extra_info' + subscid; 

Я пытаюсь получить доступ к данным, хранящимся в переменной, которая содержит дополнительную информацию, но я не могу показаться, чтобы получить доступ к нему. Глупо, я знаю :-)

EDIT: Так, имя переменной, что я в конце концов нужно, чтобы получить доступ является:

extra_infoXXXXX

где XXXXX хранится в subscid.

+0

ли в другой функции, или они все в том же пространстве? – Ben

+0

здесь subscid - переменная? – Balu

+0

Какая «дополнительная информация» выполняет 'extra_info'. Это строка? Объект? –

ответ

2

Нет цитаты:

selector = extra_info + subscid; 

Или, и я ненавижу, чтобы предположить, что это потому, что это красный флаг плохой дизайн, вы можете использовать eval():

selector = eval('extra_info' + subscid); 

(Obilgatory "eval is evil" link)


EDIT

Похоже, вы должны хранить ваши extra_info в объекте массива с subscid для его индексов свойств!

Чтобы получить доступ, сделайте что-нибудь вроде extra_info[subscid].

+3

Головокружение без объяснения = лучшее. – Ben

+0

Действительно, ненавидьте, когда они это делают! Что касается переменной вещи :-) Теперь я храню все это в массиве. Что он на самом деле делает, у меня есть страница с формой. Это делает запрос ajax и показывает результаты в компактной форме. Я хочу, чтобы полная информация (хранилась в extra_info []) отображалась в оверлее, которая загружается при нажатии. Поэтому мой возвращаемый текст AJAX добавляет к каждому результату. – Borniet

+0

@ FabrícioMatté, это не точно. Это не определено, потому что функция ничего не возвращает.Попробуйте '(function() {var foo = 42; return eval ('foo');}());' –

2

Edit:

Ваш комментарий:

extra_infoXXXXX содержит строку

... это звучит, как если subscid содержит "foo", вы хотите получить значение extra_infofoo. Если это так, вам понадобится объект, чтобы посмотреть его; в противном случае вы будете вынуждены использовать eval.

Если эти extra_infoxxxx переменные Глобалы, вы можете посмотреть их на окно:

selector = window['extra_info' + subscid]; 

Если нет, я не хочу сказать, что вы застряли с eval:

selector = eval('extra_info' + subscid); // Blech 

Но к сведению что если вы делаете это, лучше отступить и переоценить (не каламбур!) ваш дизайн.Например, может быть, вы могли бы сделать объект с дополнительной информацией как свойства:

var extra_info = { 
    foo: "bar" 
}; 

Тогда вы могли бы посмотреть на информацию, как это:

selector = extra_info[subscid]; 

Оригинал ответа:

С вашей информацией очень сложно сказать, но я думаю Вы ищете :

selector = extra_info[subscid]; 

... при условии, что subscid содержит имя свойства на extra_info, что вы хотите получить доступ.

В JavaScript, вы можете получить доступ к свойству объекта, используя точечную нотацию и буквальное имя свойства:

x = foo.bar; 

... или используя квадратные скобки обозначения и имя строки свойства:

x = foo["bar"]; 

Во втором случае строка может быть результатом любого выражения. Так, например:

b = "bar"; 
x = foo[b]; 

или даже

x = foo['b' + 'a' + 'r']; 
+0

Я думаю, что он ищет 'window ['extra_info' + subscid]', но если vars находятся в другом объеме, OP нуждается в объекте, который я думаю .. – elclanrs

+1

Эй, TJ, тем временем я выбрал вторую рекомендации: редизайн и сохранение в объекте/массиве. – Borniet

+0

@Borniet: Хорошая сделка. Но обратите внимание, что это * не * массив, это объект. –

-1

Чтобы получить variabale сделать так,

selector = extra_info+""+subscid['XXX'] 
+0

extra_info - это не массив, имя переменной, в которой я нуждаюсь, - extra_infoxxx, где xxx хранится в subscid – Borniet

+0

@SrikanthManian - см. Мой ответ. – Ben

+0

@Steve, который также был моим первоначальным ответом, тогда Борнит прокомментировал, что другая половина переменной была внутри субсида и, следовательно, отредактировала мой ответ. – SrikanthManian

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