在Javascript中计算数字范围

时间:2017-08-19 21:37:06

标签: javascript algorithm

我有一张地图,其中定义了不同的数字范围。用户可以选择以下任何范围选项,

var map = [
{
    'low':0,
    'high':10
},
{
    'low':10,
    'high':25
},
{
    'low':25,
    'high':50
},
{
    'low':50,
    'high':100
},
{
    'low':100,
    'high':999999
}
];

用户选择

0: 0-10
1: 10-25
2: 25-50
3: 50-100
4: 100-99999

用户可以选择任何一个范围选项,也可以选择多个。如果用户选择0:0-10和1:10-25选项,那么我需要设置一个范围,即0-25(从选项1获取低值,从选项2获得更高值)。以类似的方式,可以有多种选择选项,如

0,1,3,4 = 0-25 & 50-100
0,2,4 = 0-10,25-50,100-99999

我正在用JavaScript编写这个算法

var map = [ {     '低':0,     '高':10 }, {     '低':10,     '高':25 }, {     '低':25,     '高':50 }, {     '低':50,     '高':100 }, {     '低':100,     '高':999999 } ];

function getRanges(selected){

var ranges = [],already_used_range = [],low=0,high=0;
for(var i= selected.length-1;i >0; i--) { 

    console.log('i ='+i);
    if(selected[i] - selected[i-1] > 1) {
        console.log('here');

        if(!$.inArray(selected[i], already_used_range)) {
            ranges.push(map[selected[i]]);
        }
        ranges.push(map[selected[i-1]]);
        console.log(ranges);
    } else {
        console.log('here2');
        //console.log('selected.i-1 = ' + selected[i-1]);
        console.log('selected.i = ' + selected[i]);
        //var lv = i-1;
        var lv = i;
        console.log('lv =' + lv);
        console.log('selected[lv] =' + selected[lv]);

        console.log('low = ' + map[selected[lv]-1].low);
        console.log('high = ' +map[selected[i]].high);
        low = map[selected[lv]-1].low;
        if(high ==0) { 
            var hv = selected[i];
            console.log("hv =" + hv);
            high = map[hv].high;
            }

        already_used_range.push(selected[i]);
        already_used_range.push(selected[lv]-1);            
    }   
}

console.log("low = " + low);
console.log("high = " + high);
console.log("ranges");
console.log(ranges);

}

var selected = [2,3,4]; getRanges(选择的);

var selected = [3,4]; getRanges(选择的);

var selected = [2,4]; getRanges(选择的);

1 个答案:

答案 0 :(得分:-1)

关于您的评论,以下是可以实现此目的的代码:

var map = [
    {
        'low':0,
            'high':10
    },
    {
        'low':10,
        'high':25
    },
    {
        'low':25,
        'high':50
    },
    {
        'low':50,
        'high':100
    },
    {
        'low':100,
        'high':999999
    }
];

var input = [0, 1, 4] // some user input

lowest = map[input[0]]['low'] // lowest of range will be the first item of user selection
highest = map[input[input.length - 1]]['high'] // highest will be the last item of user selection