如何在javascript中使用范围在最小值和最大值之间创建比例?

如何在javascript中使用范围在最小值和最大值之间创建比例?,javascript,arrays,function,object,Javascript,Arrays,Function,Object,我需要创建一个类似这样的动态缩放 范围1=0到100 范围2=100至200 范围3=200至300 范围4=300至400 范围5=400至500 范围6=600至700 范围7=700至800 范围8=800至900 范围9=900至1000 这里,范围为1到9,最小值为0,最大值为1000。这些范围、最小值和最大值是动态的 所以,我需要一个函数来返回天平 例如:- function getScales(minRage, maxRange, minValue, maxValue){

我需要创建一个类似这样的动态缩放

范围1=0到100
范围2=100至200
范围3=200至300
范围4=300至400
范围5=400至500
范围6=600至700
范围7=700至800
范围8=800至900
范围9=900至1000
这里,范围为1到9,最小值为0,最大值为1000。这些范围、最小值和最大值是动态的

所以,我需要一个函数来返回天平

例如:-

    function getScales(minRage, maxRange, minValue, maxValue){
      var scales={};
       ..........
       ............
      return scales;
    }
   //Output:
   [
    {
        range   :1
        min     :0,
        max     :100
    },
    {
        range   :2
        min     :100,
        max     :200
    },
    {
        range   :3
        min     :200,
        max     :300
    },
    ....
    ....
    {
        range   :9,
        min     :900,
        max     :1000
    }
  ]
为了得到上面的结果,我需要像下面这样调用函数
getScales(1,9,0,1000)

这就是我的实际需求:如果我调用
getScales(1,54000418500)

诸如此类:

var factory = function(start, end, minV, maxV){
    var result = [],
        st = (maxV - minV) / (end - start + 1),
        buffer = minV;
    for(var i = 0; i <= end - start; i++){
        buffer = st * i + minV;
        result.push({
            range: i,
            minValue: buffer.toFixed(2),
            maxValue: (buffer + st).toFixed(2)
        });
    }   
    return result;
}

console.log(JSON.stringify(factory(0, 4, 253, 467)))

看看这个:

function getScales(minRange, maxRange, min, max){
    var scales = [],                  // Prepare some variables
    ranges = maxRange+1 - minRange,   // Amount of elements to be returned.
    range  = (max-min)/ranges;        // Difference between min and max
    for(var i = 0; i < ranges; i++){
        scales.push({
            range: i+minRange,        // Current range number
            min: min + range * i,
            max: min + range * (i+1)
        });
    }
    return scales;
}
输出:

[
    {
        "range": 0,
        "min": 0,
        "max": 100
    },
    {
        "range": 1,
        "min": 100,
        "max": 200
    },
    .......
    {
        "range": 8,
        "min": 800,
        "max": 900
    },
    {
        "range": 9,
        "min": 900,
        "max": 1000
    }
]

要消除输出中的浮点错误,可以替换:

min: range * i,
max: range * (i+1)
与:


2
替换为小数点后所需的位数。

“请帮助我创建函数”不是一个好问题。这应该更像是“请帮助我修复我的函数,我尝试了这个,但它不起作用,因为[解释]”,如果你不知道答案。。。不要这样评论。现在,你可以复制下面的答案,如果你想…:)如果最小范围的起始点不是
0
,例如:
factory(5,9,0,1000)
当然我可以从0开始,但这并不重要)如果OP指定了
min
max
范围,则应该假设两者都是可变的
factory(5,9,0,1000)
返回一个数组,其中的最后一个值为:
{“range”:9,“minValue”:1800,“maxValue”:2000}
minValue
maxValue
都超过了
maxV
参数的值。当然,你的代码不会抛出任何错误,但这并不意味着它能按预期工作。@Cerbus我修正了这个时刻,因为你的代码不能工作,所以我对你投了反对票。修复工作正常,但现在没有必要保留旧版本。这只会导致混乱。如果你能从我的回答中去掉你的反对票,我将不胜感激。(除非真的有什么问题。)那个否决我的人能解释一下原因吗?如果我犯了错误,我想从中吸取教训。cerbus,谢谢你的回复,但请检查这个getScales(0,4253467)。输出:[{“范围”:0,最小值:**0**,“最大值”:42.8},{“范围”:1,“最小值”:42.8,“最大值”:85.6},{“范围”:2,“最小值”:85.6,“最大值”:128.39999999999998},{“范围”:3,“最小值”:128.3999999999998,“最大值”:171.2},{“范围”:4,“最小值”:171.2,“最大值”:**214**:171.2,“max”:**467**}.Hm,@Mohammedshafeek:这看起来像是一些JavaScript浮点精度错误。(基本上,JavaScript处理浮动的方式存在缺陷)。您的输出需要什么样的精度?小数点后面只有一个数字?考虑将传递的“min”值作为偏移量输出到最小和最大值。
[
    {
        "range": 0,
        "min": 0,
        "max": 100
    },
    {
        "range": 1,
        "min": 100,
        "max": 200
    },
    .......
    {
        "range": 8,
        "min": 800,
        "max": 900
    },
    {
        "range": 9,
        "min": 900,
        "max": 1000
    }
]
min: range * i,
max: range * (i+1)
min: (range * i).toFixed(2),
max: (range * (i+1)).toFixed(2)