首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化Javascript以计算范围

简化Javascript以计算范围
EN

Stack Overflow用户
提问于 2009-09-25 15:50:28
回答 3查看 1.6K关注 0票数 1

我有一小段javascript用来计算图形的y-scale。我需要根据值来调整比例。这是可行的,但看起来很冗长。有没有一种更简单的方法来做这件事呢?

代码语言: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
}   
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-25 16:00:11

同样的事情,可能会更简洁,取决于你的编程风格。

代码语言:javascript
复制
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的值(尽管原始的值也不会)

票数 3
EN

Stack Overflow用户

发布于 2009-09-26 00:44:53

这是一个没有循环的解决方案,可以扩展到1,2.5,5,10,2.5,...对于任意大的值:

代码语言:javascript
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 2009-09-25 15:59:23

为什么不使用for循环呢?

代码语言:javascript
复制
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 ];
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1478122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档