1

我有一些 javascript 用于计算图形的 y 比例。我需要根据值调整比例。这有效,但似乎真的很冗长。有没有更简化的方法来做到这一点?

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 仅设置一次,但请注意这不会修改大于 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 回答