2012-03-25 2 views
0

Я столкнулся с запутанным фактом во время кодирования сценария.найти переменную, которая равна значению другой переменной

Как найти переменную, которая равна значению другой переменной. Затем получите значение этой переменной.

Вот пример:

var result; 
var 1 = "john"; 
var 2 = "amy"; 
var 3 = "micheal"; 

var info = "1"; 

Когда вар информация устанавливается на 1, сценарий будет искать переменную 1, которая имеет значение JOHN затем получить значение john. Затем установите для значения результата значение «john».

Для того же,

Когда вар информация устанавливается на 2, сценарий будет искать переменную 2, которая имеет значение AMY затем получить значение amy. Затем установите для результата значение «ами».

и так далее .. значение

моей информации переменной не определено. он может быть 1, 2 или 3, который устанавливается/определяется событием пользователя.

P/S я могу использовать if и else, но я хочу знать, как это можно сделать. :)

Так как я могу это сделать?

+1

Являются ли эти даже действительные имена переменных в JS? – PeeHaa

+1

Рассматривали ли вы использование массива? – PeeHaa

ответ

4

Вы, вероятно, хотите сделать что-то совсем другое:

var result; 

var names = { 
    '1': 'john', 
    '2': 'amy', 
    '3': 'michael' 
}; 

var info = "1"; 
result = names[info]; 

Это поставит 'Джон' в result.

Понимаете, это определяет нечто, называемое «поисковой таблицей», и сохраняет его в names. Затем вы можете использовать «ключ» (в вашем случае: 1, 2, 3) для поиска значения. Написание names[info] просматривает info и получает его значение, которое в приведенном выше примере "1". Затем он ищет ключ "1" внутри names и видит, что значение для "1" равно 'john'.

Я знаю, что это не совсем то, о чем вы просили, но я подозреваю, что это может помочь.

+0

да его ответ! спасибо scraimer! – sm21guy

+0

Если вы используете только цифры, вы можете использовать массив: 'var names = ['john', 'amy', 'michael'];'. – Dennis

+0

Yup! Просто помните, что если вы используете массив, то первый элемент будет автоматически '0', второй -' 1', третий - '2' и т. Д. – scraimer

0

Так как я могу это сделать?

Вы НЕ МОЖЕТЕ. (из коробки)
Вы не можете знать, что переменные именуют только их значения.

Если вы действительно хочет сделать это, и хочу оплатить его с кодом спагетти, посмотрите на это:
Get variable name. javascript "reflection"

или использовать eval как предложено @tvanfosson получить переменную значение, что является опасным и устаревшим.


  • Обратите внимание, что переменные в javascript не может начинаться с цифры. var 1 = "john"; =>недействительные

javscript variables names rules

+0

о, я вижу. Благодарю. – sm21guy

+0

oh okay принял к сведению это. Спасибо за совет. – sm21guy

1

Числа не являются юридическими именами переменных, но вы можете использовать немного зла, чтобы делать то, что вы хотите: http://jsfiddle.net/2mAeh/2/ (протестирован только в Safari). Чтобы быть ясным, я не рекомендую это. Это зло.

var result; 
var a = "amy"; 
var b = "john"; 
var c = "micheal"; 
var info = "a"; 

var variable = eval("info"); // just to satisfy your requirement, same as info 
result = eval(variable); 

alert(variable + ' = ' + result); 

Лучший способ справиться с этим было бы с картой, используя свои «имена переменных» в качестве ключей. В этом случае вы могли бы использовать числа в качестве ключей, но я буду использовать те же ключи, что и мой другой пример для согласованности.

var map = { "a": "Amy", "b" : "John", "c" : "micheal" }; 
var info = "a"; 

alert(info + ' = ' + map[info]); 
+0

Это не дает вам 'a' только его ценность. см. [this fiddle] (http://jsfiddle.net/2mAeh/3/) – gdoron

+0

@gdoron - обновлено – tvanfosson

+0

Это все еще не позволяет вам изменять 'a'. только его ценность. [Fiddle] (http://jsfiddle.net/2mAeh/4/) – gdoron

0

Подобно этому,

function findVariableByName(info){// info is 1, 2, 3 

var result; 
this['1'] = "john"; 
this['2'] = "amy"; 
this['3'] = "micheal"; 
result = this[info]; 
alert(result); 
return result; 
} 

findVariableByName(1); 

Update: результат

Если вы изменить свой код, как показано ниже, и если он находится в глобальном масштабе,

вар; var 1 = "john"; var 2 = "amy"; var 3 = "micheal"; var info = "1";

var one = 'john'; 
var two = 'amy'; 
var three = 'micheal'; 
var info = 'one'; 

Вы можете сделать,

window[info] // gives you john 
0

Вы можете сделать это путем создания объекта:

// Store your object 
var obj = {result: null, a: "john", b: "amy", c: "michael", info: "1"} 

// Iterate like so. 
    for(var key in obj) { 
     if(obj[key] == info){ 
      alert(key); 
     } 
    } 

Я не проверял этот код, но он должен работать. Удачи!

1

Использование window[var]:

one = 'two'; 

two = '1'; 

alert(window[one]); // Alerts: 1 
+0

Ooh, hoisting! Исправьте меня, если я ошибаюсь, но я думаю, что это будет работать только в глобальном масштабе, а не в функции. (И +1 для отличной точки!) – scraimer

+1

@scraimer. нет «подъема».и он будет работать только в глобальном масштабе. – gdoron

+1

А, да. Там есть ограничение. – MichaelRushton

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