如果声明 - 我如何减少代码量。 (循环?数组?)Javascript

时间:2012-06-27 17:46:33

标签: javascript

我有10个变量。 q1到q10

我的脚本如下:

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行代码x 10个变量。

[ex]是变量内部的变量(表示q1,确定q1 =是,否,或者没有回答,然后将q加到1 [ex],现在是q2 ....

我知道[]可能不正确,我只是不知道如何以一种可以理解的方式解释这一点。

谢谢。

2 个答案:

答案 0 :(得分:1)

请参阅my answer上的Alternative to a million IF statements

while循环当然是一件好事,你应该使用array q而不是单变量qN。您也可以使用for循环。

如果要释放if语句,可以使用带索引的对象(这里是一个数组,自然地从“0”到“ n-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", ...]

答案 1 :(得分:1)

这不会一直限制它,但你可以创建一个函数

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

然后为每个变量调用translate(q1)等。这会将它移到~16行而不是40行,避免重复代码。

你也可以将你的变量改造成一个变量数组并像这样快速循环,但是我不知道它们的定义在哪里以及它对你有用。 编辑:Bergi有一个很好的例子。如果你可以改变你的变量,这是最好的方法。