0

私は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行のコード×10個の変数を削除したいです。

[ex] は変数内の変数です (q1 を表すには、q1 = はい、いいえ、または応答しなかったと判断し、q[ex] に 1 を加えて q2....

[] が正しくない可能性があることは理解しています。理解できる方法でこれを説明する方法がわかりません。

ありがとうございました。

4

2 に答える 2

1

Alternative to a million IF statementに関する私の回答を参照してください。

while ループはもちろん良いことです。実際には、単一の変数の代わりに配列 を使用する必要があります。for ループを使用することもできます。qqN

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", ...]
于 2012-06-27T17:52:29.240 に答える
1

これで完全に制限されるわけではありませんが、関数を作成できます

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

次に、変数ごとに translate(q1) などを呼び出します。これにより、40 行ではなく 16 行に移動し、コードの繰り返しを避けることができます。

変数を変数の配列として再形成し、そのようにすばやくループすることもできますが、それらがすべてどこで定義されているのか、それがどのように機能するのかわかりません。編集: Bergi はこれの良い例を持っています。そのように変数を変更できる場合は、それが最善の方法です。

于 2012-06-27T17:57:55.903 に答える