Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конвертация значения в переменную (https://javascript.ru/forum/misc/11177-konvertaciya-znacheniya-v-peremennuyu.html)

lancer 11.08.2010 19:28

Конвертация значения в переменную
 
Имею переменные
var color_arr = new Array();
lips_pomade_param = 7;
color_arr[lips_pomade_param]='<li>Раздел</li>';


Имею выражение 1, которое выдает undefined
n = "lips_pomade_param";
alert(color_arr[n]);


Имею выражение 2, которое выдает '<li>Раздел</li>'
alert(color_arr[lips_pomade_param]);


Почему в выражении 1 undefined алертиться я понимаю.
Потому что, вызываем color_arr["lips_pomade_param"], а не
color_arr[lips_pomade_param].

Получается значение n нужно отконвертировать в название переменной? Не представляю как, поэтому прошу поделиться соображениями.

Octane 11.08.2010 19:37

n = lips_pomade_param;

lancer 11.08.2010 23:31

Не пойдет.

n у меня получает стринговое значение "lips_pomade_param" и ни как иначе.

Sweet 12.08.2010 00:13

Цитата:

Сообщение от lancer
n у меня получает стринговое значение "lips_pomade_param" и ни как иначе.

Ну, конечно. Ты ж и присваиваешь ему "стринговое" значение.
var lips_pomade_param = 7, 
n1 = "lips_pomade_param",
n2 = lips_pomade_param

alert(typeof n1)
alert(typeof n2)

lancer 12.08.2010 00:20

Цитата:

Ты ж и присваиваешь ему "стринговое" значение.
Я и спрашиваю как это значение превратить в название переменной.

Sweet 12.08.2010 00:29

Кстати, почему везде памада, а тут вдруг карандаш?:)
color_arr[lips_*!*pencil*/!*_param]='<li>Раздел</li>';

Sweet 12.08.2010 00:32

Цитата:

Сообщение от lancer
Я и спрашиваю как это значение превратить в название переменной.

Пилять, кавычки убери!!!
var color_arr = new Array(); 
lips_pomade_param = 7; 
color_arr[lips_pomade_param]='<li>Раздел</li>';
n = lips_pomade_param; 
alert(color_arr[n]);

lancer 12.08.2010 00:34

Потому что карандашами тоже красим. Шучу). Помада там. Отредактировал вопрос.

lancer 12.08.2010 00:36

Неужели выход только один?

if (n == "lips_pomade_param")
   color_arr[lips_pomade_param] = some_param;
else if
if (n == "lips_pencil_param")
   color_arr[lips_pencil_param] = some_param;
else if etc..

lancer 12.08.2010 00:40

Цитата:

Пилять, кавычки убери!!!
Веди себя прилично. Кавычки я никакие убрать не могу. Переменная n получает значение в процессе работы скрипта,
а не в var. Я бы и не спрашивал иначе.

Sweet 12.08.2010 00:49

Цитата:

Сообщение от lancer
Неужели выход только один?

Ну, если ты видишь только такой выход, то уж лучше switch используй:)

Gvozd 12.08.2010 00:50

Цитата:

Сообщение от lancer
Переменная n получает значение в процессе работы скрипта,

ССЗБ
var color_arr = new Array(); 
lips_pomade_param = 7; 
color_arr[lips_pomade_param]='<li>Раздел</li>';

n = "lips_pomade_param"; 
_n=eval(n);
alert(color_arr[_n]);

PS не используй это в реальных проектах.
а то Б-женька тебя накажет, а мне оторвет руки
код дан, чисто в ознакомительных целях.
при нормальном написании проекта, твой ситуация просто тне может возникнуть.
и даже если она волзникла(а этого не может ыбть, если ты правильно пишешь), то switch более лучший и правильный выход

lancer 12.08.2010 01:01

Насчет switch в курсе, просто еще его не применял, чтобы не внести в вопрос ошибок написал привычно на if'ах.

Вообще, спасибо!

Цитата:

при нормальном написании проекта, твой ситуация просто тне может возникнуть.
Зная класс элемента включаю нужный массив.
Класс использую как переменную mass[class].
Такого не может возникнуть? А что еще такого я могу знать у элемента
что не в стринге? id, data-(name) - тоже стринг.

По сути включаю нужный массив по клику на элемент. Подумал и решил реализовать как вот выше описываю.
Можно по другому?

Sweet 12.08.2010 01:15

Реальность такова, что к одному вопросу можно найти тысячу ответов. Начиная от тупо-бредовых, вроде эвала, и заканчивая вполне адекватными, типа свитча.
А, вообще... правда это секрет.. но ладно, так уж и быть - открою. Есть такая штука как объекты.. Так вот к ним как раз через строки обращаются:)
var color = {lips_pomade_param:'<li>Раздел</li>'},
n = 'lips_pomade_param'; 
alert(color[n]);

Gvozd 12.08.2010 01:36

Цитата:

Сообщение от lancer
А что еще такого я могу знать у элемента
что не в стринге?

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

inGray 12.08.2010 10:01

Меня снова будут по голове бить сейчас, но почему нельзя сделать так:
var color_arr = new Array(); 
color_arr["lips_pomade_param"]='<li>Раздел</li>';
n = "lips_pomade_param"; 
alert(color_arr[n]);

:-?

Sweet 12.08.2010 10:27

Цитата:

Сообщение от inGray
но почему нельзя сделать так

Можно, но не через массив. Почему ты так привязался к ним?! Между вами что-то есть?:) Кстати, new Array() - это, конечно, наглядно, но лучше объявлять массив через [], имхо.
Используй объекты! Найди, так сказать, одно отличие от того, что написал выше:)
var color_arr = new Object(); 
color_arr["lips_pomade_param"]='<li>Раздел</li>';
n = "lips_pomade_param"; 
alert(color_arr[n]);

new Object(), конечно, лучше просто через {} объявить

inGray 12.08.2010 10:33

Sweet,
Ты меня с lancer спутал )

Sweet 12.08.2010 10:46

inGray,
Ой, действительно:D Но смысл-то тот же

inGray 12.08.2010 11:03

Я и не спорю)) Просто предлагаю решение ;)

Sweet 12.08.2010 11:10

Просто, мне кажется, что можно взять штаны, просунуть в них руки и ходить по улице, людей велесить. А можно писать нормальный грамотный код:)

lancer 12.08.2010 15:02

Будем знать )


Часовой пояс GMT +3, время: 06:37.