我有一张地图,其中定义了不同的数字范围。用户可以选择以下任何范围选项,
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(选择的);
答案 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