Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将一个值范围映射到另一个值_Javascript_Algorithm_Map_Range - Fatal编程技术网

Javascript 将一个值范围映射到另一个值

Javascript 将一个值范围映射到另一个值,javascript,algorithm,map,range,Javascript,Algorithm,Map,Range,我试图找到一种有效的方法将一系列值映射到另一个值 1-9 -> 49 10-24 ->54 25-49 -> 59 50-74 -> 50 75-99 -> 49 100-150 -> 40 这里的值不遵循任何常规模式。一种解决方案是使用条件语句(if-else),但随着值集的增加,语句的数量增加,这将很难保持。那么有没有其他优雅而有效的方法来实现这一点呢?,因为范围是连续的,您可以尝试按起始编号映射它们,然后通过二分法搜索查找值:

我试图找到一种有效的方法将一系列值映射到另一个值

1-9 -> 49  
10-24 ->54  
25-49 -> 59  
50-74 -> 50  
75-99 -> 49  
100-150 -> 40  

这里的值不遵循任何常规模式。一种解决方案是使用条件语句(
if-else
),但随着值集的增加,语句的数量增加,这将很难保持。那么有没有其他优雅而有效的方法来实现这一点呢?

,因为范围是连续的,您可以尝试按起始编号映射它们,然后通过二分法搜索查找值:

var map = [
    [1, 49],
    [10, 54],
    [25, 59],
    [50, 50],
    [75, 49],
    [100, 40],
    [151, void 0]
];
function getValueInRange(arr, n, from, to) {
    return (function main(from, to){
        if(from>=to) return void 0;
        var mid = Math.floor((from+to)/2);
        if(arr[mid][0] > n) return main(from, mid);
        if(arr[mid][0] < n && mid > from) return main(mid, to);
        return arr[mid][1];
    })(from===void 0 ? 0 : from, to===void 0 ? arr.length : to);
}
// Use it like this:
getValueInRange(map, value);
var映射=[
[1, 49],
[10, 54],
[25, 59],
[50, 50],
[75, 49],
[100, 40],
[151,无效0]
];
函数getValueInRange(arr、n、from、to){
返回(主功能(从、到){
如果(从>=到)返回void 0;
var mid=数学楼层((从+到)/2);
如果(arr[mid][0]>n)返回主管道(from,mid);
如果(arr[mid][0]from)返回主管道(mid,to);
返回arr[mid][1];
})(从===void 0?0:from,到===void 0?arr.length:to);
}
//像这样使用它:
getValueInRange(映射,值);