我有一个非常接近的六个数字组成的数组:
const numbers = [28.71, 28.53, 28.5, 28.38, 28.43, 28.44]
我想更改这些数字的值,以使它们相对于0-100。
因此,最高的数字是100,最低的数字是0(或n
),并且中间的数字是成比例的。
我无法重新排列这些数字。
我可以使用以下方法将数组标准化为100:
const maxScore = max(numbers)
const ratio = Math.max(...numbers) / 100;
const newNumbers = numbers.map((v) => (v / ratio));
这将产生以下结果:
[100, 99.37304075235109, 99.2685475444096, 98.85057471264366, 99.02473005921281, 99.05956112852664]
但是,数字彼此之间的距离与以前相同。
如何更改这些数字的值,以使最低值为0,最高为100?
答案 0 :(得分:3)
您可以得到一个因子并获得归一化的数组。
function getNormalized(values, left, right) {
var min = Math.min(...values),
max = Math.max(...values),
factor = (right - left) / (max - min) ;
return values.map(v => (v - min) * factor + left);
}
console.log(getNormalized([28.71, 28.53, 28.5, 28.38, 28.43, 28.44], 0, 100));