我有一些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
}
答案 0 :(得分: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);
}
答案 1 :(得分: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仅设置一次,但请注意,这不会修改值&gt; 20000(虽然没有原创)
答案 2 :(得分: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 ];
}
}