2015-05-21 2 views
1

У меня очень длинный код и вы хотите его упростить. Я не думаю, что мы можем использовать конкатенацию строк для создания имени переменной. Есть ли другой путь.Как создать переменную с конкатенацией в javascript?

If(Something){ 
    var a = some.Test1.x; 
    var b = some.Test1.y; 
    var c = some.Test1.z; 
    var d = some.Test1.p; 
} 

If(SomethingElse){ 
    var a = some.Test2.x; 
    var b = some.Test2.y; 
    var c = some.Test2.z; 
    var d = some.Test2.p; 
} 

If(OneMore){ 
    var a = some.Test3.x; 
    var b = some.Test3.y; 
    var c = some.Test3.z; 
    var d = some.Test3.p; 
} 

Может быть, создается такая функция, я знаю, что это неправильно, но ничего подобного.

function test(s){ 
    a = some.s.x; 
    b = some.s.y; 
    c = some.s.z; 
    d = some.s.p; 
} 
+1

Обратите внимание, что вы можете заменить 'o.foo' на' o ["foo"] 'ie, то есть вы можете получить доступ к полю' foo' '' '' '' 'буквами или строкой (' 'foo" 'may быть строкой) – BeyelerStudios

+1

Этот вопрос вне темы для SO и должен быть перемещен в [CodeReview] (http://codereview.stackexchange.com/questions) – hindmost

ответ

3

Вы можете использовать массив как синтаксис

function test(s) { 
    var a,b,c,d; 
    if (s === Something) { 
     test = "Test1"; 
    } 
    if (s === SomethingElse) { 
     test = "Test2"; 
    } 
    if (s === OneMore) { 
     test = "Test3"; 
    } 

    a = some[test].x; 
    b = some[test].y; 
    c = some[test].z; 
    d = some[test].p; 
} 

Это значительно улучшенная версия функционально эквивалентны, но никогда, чтобы быть используемым, Eval синтаксис:

eval("a = some."+test+".x"); 
+0

, так что если у меня есть что-то вроде random.x.Test1.qi, сделайте some.x [test] .q в соответствии с вашим ответом – Nakib

+1

@Nakib не забудьте обработать 'test === undefined' в этом примере – BeyelerStudios

1
function test(index){ 
    t = some["Test" + index]; 

    a = t.x; 
    b = t.y; 
    c = t.z; 
    d = t.p; 
} 

и исполнение:

test(1); test(2); test(3) 
Смежные вопросы