如何从给定范围中获取值并将其映射到新范围。
我的意思是,如果我有范围 A:0 → 100
(0,1,2,3,4,...( 和范围 B:0 → 1000
如果我从范围 A 中选择0
,我们应该从范围 B 中得到0
,或者如果我们在范围 A 中选择50
,我们应该在范围B 中得到500
,等等......
该函数应如下所示:
mapRange(Chosen value, min of range A, max of range A, min of range B, max of range B)
我为此绑定了一个数学方程式:
( Chosen value/max of range A)*max of range B
但它不包括范围的最小值。
有一些库解决方案,但我不知道如何在纯javascript中实现它。
提前谢谢。
您可以通过计算到区域中的偏移量然后将其应用于新范围来执行此操作,例如:
function convertRange(value, currentRange, newRange) {
// Convert the value into a number from 0-1 (0 meaning start of range and 1 end of range)
let offset = (value - currentRange.start) / (currentRange.end - currentRange.start);
// Apply offset to new range
return newRange.start + offset * (newRange.end - newRange.start);
}
let range1 = {start: 0, end: 100};
let range2 = {start: 0, end: 1000};
console.log(convertRange(0, range1, range2));
console.log(convertRange(50, range1, range2));
console.log(convertRange(100, range1, range2));
除了给定的答案之外,我建议将函数组织为给定范围内的闭包,并返回一个只接受单个值的函数。例如,这种方法允许将其用作数组的映射函数。
function f(minA, maxA, minB, maxB) {
return function (x) {
return (x - minA) * (maxB - minB) / (maxA - minA) + minB;
};
}
console.log(f(0, 100, 0, 1000)(50));