1

関数を実行しているときに、変数に問題があります。これは単なるばかげた例です。私のコードには、関数で使用したい変数がたくさんあるので、変数「ex1、ex2など」ごとに関数を何度も書く必要はありません。以下は私がやりたいことです本当に簡単です。最初に、宣言された値と等しい「ex1」をチェックしてから、アクション (実際のコードでのアニメーション) を実行します。次に、「ex2」などについても同じことを行います。これを行う簡単な方法はありますか?

<script>
var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';

var x = 0;
setInterval("call", 5000);
function call(){

    x++;

    if(('ex' + x) == 'frog'){
    //action a
    }
    else if(('ex' + x) == 'pig'){
    //action b
    }
    else if(('ex' + x) == 'horse'){
    //action c 
    }
    else if(('ex' + x) == 'bird'){
    //action d
    }

}

</script>
4

2 に答える 2

2

グローバル変数はwindowオブジェクトのプロパティです (とにかくブラウザーで)。次のように、角括弧表記を使用してプロパティにアクセスできます。

var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';

var x = 0;

function call(){

    x++;

    if(window['ex' + x] === 'frog'){
    //action a
    }
    else if(window['ex' + x] === 'pig'){
    //action b
    }
    else if(window['ex' + x] === 'horse'){
    //action c 
    }
    else if(window['ex' + x] === 'bird'){
    //action d
    }

}

setInterval(call, 5000);

ただし、exここでは配列を作成する方がおそらく良いでしょう。

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';

var x = 0;

function call(){

    x++;

    if(ex[x] === 'frog'){
    //action a
    }
    else if(ex[x] === 'pig'){
    //action b
    }
    else if(ex[x] === 'horse'){
    //action c 
    }
    else if(ex[x] === 'bird'){
    //action d
    }

}

setInterval(call, 5000);

多数の文字列に対してこれを行う場合は、次のswitchステートメントを使用します。

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';

var x = 0;

function call(){

    x++;
    switch(ex[x]) {
       case 'frog':
           //action a
           break;
       case 'pig':
           //action b
           break;
       case 'horse':
           //action c
           break;
       case 'bird':
           //action d
           break;
    }

}

setInterval(call, 5000);
于 2013-10-23T08:40:40.407 に答える