2012-06-27 2 views
0

У меня есть 10 переменных. q1 через q10Если утверждение - как уменьшить количество кода. (loop? array?) Javascript

мой сценарий выглядит следующим образом:

if (q1 == '1') { q1 = 'Yes'; 
} else if (q1 == '2') { q1 = 'No'; 
} else { q1 = 'Did Not Answer'; } 

я уже напечатал это для всех 10. Я не уверен, если я могу вставить другую переменную в эту переменную.

Я пытаюсь сделать что-то вроде этого:

var ex = '1'; 
while (ex < 11) { 
if (q[ex] == '1') { q[ex] = 'Yes'; ex++; 
} else if (q[ex] == '0') { q[ex] = 'No'; ex++; 
} else { q[ex] = 'Did Not Answer'; ex++ } 

В основном я хочу, чтобы исключить 4 строк кода х 10 переменных.

[бывший] является переменной внутри переменной (для представления q1, определить q1 = Да, Нет или не ответил, а затем добавить 1 -Q [бывший] который теперь будет q2 ....

Я понимаю, что [] не может быть правильно, я просто не знаю, как объяснить это таким образом, что вполне понятно.

Спасибо.

+0

Что касается использования switch-case заявление? Карта с результатами (массив) была бы лучшая, как и для меня, было бы понятно – varela

+0

возможный дубликат [Альтернатива миллионам операторов IF] (http://stackoverflow.com/questions/10029089/alternative-to-a-million -if-statements) –

+3

Возможно, вместо 10 переменных вам нужен только один массив. – Pointy

ответ

1

Это не будет ограничивать ее вниз весь путь, но вы можете создать функцию

translate = function(v) 
{ 
    if (v === '1') { 
     v = 'Yes'; 
    } else if (v === '2') { 
     v = 'No'; 
    } else { 
     v = 'Did Not Answer'; 
    } 
    return var 
} 

Затем вызовите перевод (q1) и т.д. для каждой переменной. Это переместило бы его на ~ 16 строк, а не на 40, и избежать повторения кода.

Вы также можете преобразовать переменные в виде массива переменных и быстро пройти через это, но я не знаю, где они все определены и как это будет работать для вас. EDIT: У Берги есть хороший пример. Если вы можете изменить свои переменные таким образом, это лучший способ.

+0

Конечно, это имеет смысл для меня :) Переменные исходят из сообщения формы. –

+0

Вы могли заставить его работать так? –

+0

Я довольно новичок в javascript, и я пытался заставить другой ответ работать, но не мог понять. Я поработаю над этим позже сегодня днем. –

1

См my answer на Alternative to a million IF statements.

Цикл while - это, конечно, Хорошая вещь, вы должны действительно использовать arrayq вместо отдельных переменных qN. Вы также можете использовать for-loop.

Если вы хотите eleminate в случае-заявления, вы можете использовать объект с индексами (здесь массив, который естественно индексируется от «0» до «п-1», делает ту же работу):

var q = ["0", "1", 1, 0, 2, ...]; 
for (var i=0; i<q.length; i++) 
    q[i] = ["No", "Yes"][q[i]] || "Did Not Answer"; 

// result for q: 
["No", "Yes", "Yes", "No", "Did Not Answer", ...] 
+0

После прочтения оригинала (альтернатива мельнице .....) я не был уверен в ответе, однако это объяснение немного больше скроено для того, что я делаю. Спасибо. Я верю, что объясню, что могу адаптировать это к 4 или 5 местам, которые мне понадобятся в моем сценарии. Я ценю редактирование. Я был немного потерян в первой части. –

+0

Да, мне нужно было немного адаптировать этот ответ. Вы также просили использовать массивы вместо 10 переменных. [...] является [буквальным выражением для массивов] (https: //developer.mozilla.org/en/JavaScript/Guide/Values, _Variables, _and_Literals # Array_literals), вы можете, конечно, заполнить свой массив динамически. – Bergi

+0

для var q = и т. Д. как есть некоторые из них «0», а другие - только 0 –

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