我有一小段javascript用来计算图形的y-scale。我需要根据值来调整比例。这是可行的,但看起来很冗长。有没有一种更简单的方法来做这件事呢?
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
} 发布于 2009-09-25 16:00:11
同样的事情,可能会更简洁,取决于你的编程风格。
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-26 00:44:53
这是一个没有循环的解决方案,可以扩展到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-25 15:59:23
为什么不使用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 ];
}
}https://stackoverflow.com/questions/1478122
复制相似问题