1

グラフの y スケールを計算するために使用している JavaScript が少しあります。値に応じてスケールを調整する必要があります。これは機能しますが、非常に冗長に見えます。これを行うためのより合理的な方法はありますか?

if (maxValue <= 20000){
    chartMaxY = 20000
}       
if (maxValue <= 10000){
    chartMaxY = 10000
}       
if (maxValue <= 5000){
    chartMaxY = 5000
}       
if (maxValue <= 2500){
    chartMaxY = 2500
}
if (maxValue <= 1000){
    chartMaxY = 1000
}
if (maxValue <= 500){
    chartMaxY = 500
}       
if (maxValue <= 250){
    chartMaxY = 250
}           
if (maxValue <= 100){
    chartMaxY = 100
}   
if (maxValue <= 50){
    chartMaxY = 50
}   
if (maxValue <= 10){
    chartMaxY = 10
}   
4

3 に答える 3

4

任意の大きな値に対して 1、2.5、5、10、2.5、... にスケーリングするループのないソリューションを次に示します。

function maxScale(x) {
    var l = Math.log(x) / Math.LN10, p = Math.floor(l), q = Math.pow(10, l - p);
    return Math.pow(10, p) * (q > 2.5 ? (q > 5 ? 10 : 5) : 2.5);
}
于 2009-09-25T16:44:52.927 に答える
3

同じことですが、プログラミングスタイルによってはもっと簡潔になる可能性があります。

var keys = [10, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 20000];

for (var i=0; i<keys.length; i++) {
    if (maxValue <= keys[i]) {
        chartMaxY = keys[i];
        break;
    }
}

キー値の順序を逆にすると、maxValueは1回だけ設定されますが、これは20000を超える値を変更しないことに注意してください(どちらも元の値を変更しませんでした)

于 2009-09-25T16:00:10.863 に答える
2

forループを使用してみませんか?

var vals = [ 20000, 10000, 5000, 2500, 1000, 500, 250, 100, 50, 10 ];

for( var i = 0; i < vals.length; i++ )
{
    if( maxValue >  vals[ i ] )
    {
        break;
    }
    else
    {
        chartMaxY = vals[ i ];
    }
}
于 2009-09-25T15:59:23.017 に答える