Javascript 如何使数组中的最低值=x,最高值=y,同时使所有其他值相对

Javascript 如何使数组中的最低值=x,最高值=y,同时使所有其他值相对,javascript,arrays,Javascript,Arrays,假设我们有一个类似于[-0.6,-1.3,0.4,7.4,6.1,4.4,-0.1,0]的值数组-1.3为最低值,7.4为最高值 如果我们要转换数组中的所有数字,使最小值变为0,最大值变为140(以及所有其他数字变为相对于最小值和最大值)。即: [-0.6,-1.3,0.4,7.4] 将成为 […,0,…,140] 我们将如何完成这样的事情 干杯。你想要这样的吗 const逻辑=(arr、from、to)=>{ 设min=arr[0], max=arr[0]; 如果(arr.length>1)

假设我们有一个类似于
[-0.6,-1.3,0.4,7.4,6.1,4.4,-0.1,0]
的值数组
-1.3
为最低值,
7.4
为最高值

如果我们要转换数组中的所有数字,使最小值变为0,最大值变为140(以及所有其他数字变为相对于最小值和最大值)。即:

[-0.6,-1.3,0.4,7.4]

将成为

[…,0,…,140]

我们将如何完成这样的事情


干杯。

你想要这样的吗

const逻辑=(arr、from、to)=>{
设min=arr[0],
max=arr[0];
如果(arr.length>1)
for(设i=1;imax)max=val;
}
设差异=最大-最小;
让比例=到/差;
返回arr.map(x=>(x-min)*比例+起始)
}
设arr=[-0.6,-1.3,0.4,7.4];
让结果=逻辑(arr,0,140);

控制台日志(结果)你想要这样的东西吗

const逻辑=(arr、from、to)=>{
设min=arr[0],
max=arr[0];
如果(arr.length>1)
for(设i=1;imax)max=val;
}
设差异=最大-最小;
让比例=到/差;
返回arr.map(x=>(x-min)*比例+起始)
}
设arr=[-0.6,-1.3,0.4,7.4];
让结果=逻辑(arr,0,140);
控制台日志(结果)使用vanilla JS

首先找到最小值和最大值

将从最小值中减去每个值,使值从0开始,即
-1.3-(-1.3)=0
要找到比例因子,请取比例最大值(140),然后除以最大值和最小值之间的差值<代码>140/(7.4-(-1.3))=16.091954…

然后可以使用
(x-minVal)*比例映射每个值
,以便将每个值映射到0到140之间的值

let src=[-0.6,-1.3,0.4,7.4];
const minMaxReducer=(acc,currVal)=>{
//检查最小值
如果(acc.min==null | | currValacc.max)
acc.max=当前值;
返回acc;
}
//查找最小值和最大值
var范围=src.reduce(minMaxReducer{
min:null,
max:null
});
让刻度=140/(range.max-range.min);
//缩放所有值
让结果=src.map(x=>(x-range.min)*比例);
控制台日志(结果)使用vanilla JS

首先找到最小值和最大值

将从最小值中减去每个值,使值从0开始,即
-1.3-(-1.3)=0
要找到比例因子,请取比例最大值(140),然后除以最大值和最小值之间的差值<代码>140/(7.4-(-1.3))=16.091954…

然后可以使用
(x-minVal)*比例映射每个值
,以便将每个值映射到0到140之间的值

let src=[-0.6,-1.3,0.4,7.4];
const minMaxReducer=(acc,currVal)=>{
//检查最小值
如果(acc.min==null | | currValacc.max)
acc.max=当前值;
返回acc;
}
//查找最小值和最大值
var范围=src.reduce(minMaxReducer{
min:null,
max:null
});
让刻度=140/(range.max-range.min);
//缩放所有值
让结果=src.map(x=>(x-range.min)*比例);

控制台日志(结果)您需要的是数组值的

  • new=a*old+b
有这样的限制

  • newMax=a*oldMax+b
  • newMin=a*oldMin+b
其中
oldMin
oldMax
来自数组,而
newMin
newMax
是给定的(
0
140

如果你减去这两个方程,你得到

  • newMax-newMin=a*(oldMax-oldMin)
i、 e

  • a=(newMax-newMin)/(oldMax-oldMin)
在第二个等式中替换这个

  • newMin=(newMax-newMin)/(oldMax-oldMin)*oldMin+b
i、 e

  • b=newMin-(newMax-newMin)/(oldMax-oldMin)*oldMin
如果我们调用
oldRange=oldMax-oldMin
newRange=newMax-newMin
,我们可以将它们重写为:

  • a=newRange/oldsrange
  • b=newMin-newRange/oldsrange*oldMin
如果我们调用
scale=newRange/oldRange
,我们可以进一步简化表示法:

  • a=scale
  • b=newMin-scale*oldMin
这是代数题。现在,JavaScript:

让oldArr=[-0.6,-1.3,0.4,7.4,6.1,4.4,-0.1,0];
让oldMin=Math.min.apply(null,oldArr);
让oldMax=Math.max.apply(null,oldArr);
设oldRange=oldMax-oldMin;
设newMin=0;
设newMax=140;
设newRange=newMax-newMin;
让比例=新范围/旧范围;
设a=刻度;
设b=newMin—标度*oldMin;
设newArr=oldArr.map(x=>a*x+b);

控制台日志(newArr)您需要的是数组值的

  • new=a*old+b
有这样的限制

  • newMax=a*oldMax+b
  • newMin=a*oldMin+b
其中
oldMin
oldMax
来自数组,而
newMin
newMax
是给定的(
0
140

如果你减去这两个方程,你得到

  • newMax-newMin=a*(o