1

配列の設定で変数を使用すると、スクリプトでエラーが発生します。変数をそれらが持っている数値(私が確認したもの)に置き換えるだけでは、エラーは発生しません。

このように配列を設定すると何か問題がありますか?

arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

参考になれば関数全体を見ることができます

function generateChart(viewerObj){

        if(viewerObj.getActiveUsers){
            var leftAmount = viewerObj.getActiveUsers;
        }
        else{
            window.leftAmount = 0;
        }
        if(viewerObj.getActiveUsers){
            var middleAmount = viewerObj.getActiveUsers;
        }
        else{
            var middleAmount = 0;
        }
        if(viewerObj.dontGetActiveUsers){
            var rightAmount = viewerObj.dontGetActiveUsers;
        }
        else{
            var rightAmount = 0;
        }

        arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

        $('.divGraph').jqBarGraph({ data: arrayOfData }); 
    }
4

3 に答える 3

1

私が見ることができる唯一の潜在的な問題は、ほとんどの場合...

var variable_name

... と の両方ifelse、しかし一度はこれを持っています...

if(viewerObj.getActiveUsers){
    var leftAmount = viewerObj.getActiveUsers;
}
else{
    window.leftAmount = 0;
}

...したがって、if条件が失敗すると、 localleftAmountは になり、値を持つundefinedglobal をシャドーイングします。leftAmount0

undefinedその配列を使用している場所ならどこでも、の代わりが気に入らないと思います0


に変更window.leftAmountするvar leftAmountか、変数宣言を関数の先頭に移動します。

function generateChart(viewerObj){
    var leftAmount = 0, middleAmount = 0, rightAmount = 0;

    if(viewerObj.getActiveUsers)
        leftAmount = viewerObj.getActiveUsers;

    if(viewerObj.getActiveUsers)
        middleAmount = viewerObj.getActiveUsers;

    if(viewerObj.dontGetActiveUsers)
        rightAmount = viewerObj.dontGetActiveUsers;

    arrayOfData = new Array(
        [leftAmount, 'Get', '#2697C9'],
        [middleAmount, 'Neutral', '#E7E7E7'],
        [rightAmount, 'Don\'t Get', '#EB5830']
    );

    $('.divGraph').jqBarGraph({ data: arrayOfData }); 
}

ここでは、上部にデフォルトの初期化も設定します。必要に応じて、に戻すelseか、条件演算子を使用できます...

rightAmount = viewerObj.dontGetActiveUsers ? viewerObj.dontGetActiveUsers : 0;

または、基本的な真偽テストを行っているので、これを行うことができます...

rightAmount = viewerObj.dontGetActiveUsers || 0;
于 2012-08-03T23:03:57.253 に答える
0

私が見つけることができる唯一の奇妙な点は、あなたのwindow.leftAmount. なぜそれを書いたのですか?が真実でない場合viewerObj.getActiveUsers、ローカル変数leftAmountは になりますundefined

ただし、さまざまな if 句の代わりにOR演算子を使用すると、スクリプトを大幅に短縮できます( How it works )。

var arrayOfData = [
  [viewerObj.getActiveUsers || 0, 'Get', '#2697C9'],
  [viewerObj.getActiveUsers || 0, 'Neutral', '#E7E7E7'],
  [viewerObj.dontGetActiveUsers || 0, 'Don\'t Get', '#EB5830']
];

$('.divGraph').jqBarGraph({ data: arrayOfData }); 
于 2012-08-03T23:09:50.550 に答える
-1

varこれらの変数のスコープを if/else ブロックに制限するために使用し、そのスコープ外の変数を使用しようとすると、変数が未定義になります。使用しようとしているのと同じスコープで変数を宣言することをお勧めします。

function generateChart(viewerObj){

        var leftAmount = 0, middleAmount = 0, rightAmount = 0; // declare variables in this scope.

        if(viewerObj.getActiveUsers){
           leftAmount = middleAmount = viewerObj.getActiveUsers;
        }

        if(viewerObj.dontGetActiveUsers){
           rightAmount = viewerObj.dontGetActiveUsers;
        }

        arrayOfData = new Array(
            [leftAmount, 'Get', '#2697C9'],
            [middleAmount, 'Neutral', '#E7E7E7'],
            [rightAmount, 'Don\'t Get', '#EB5830']
        );

        $('.divGraph').jqBarGraph({ data: arrayOfData }); 
    }
于 2012-08-03T23:08:38.670 に答える