Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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_Normalize - Fatal编程技术网

Javascript 如何在某些范围内映射数字

Javascript 如何在某些范围内映射数字,javascript,normalize,Javascript,Normalize,我有一系列的值,例如,[01100]=[minValue,maxValue]和频带数,例如频带数=5。 所以我可以得到这些波段: [0 - 20] [21 - 40] [41 - 60] [61 - 80] [81 - 100] 然后我想在每个范围内关联一个标度值: i: 0 --> [0 - 20] --> 0.2 i: 1 --> [21 - 40] --> 0.4 i: 2 --> [41 - 60] --> 0.6 i

我有一系列的值,例如,
[01100]=[minValue,maxValue]
和频带数,例如
频带数=5
。 所以我可以得到这些波段:

[0 - 20]
[21 - 40]
[41 - 60]
[61 - 80]
[81 - 100]
然后我想在每个范围内关联一个标度值

i: 0   -->  [0 - 20]   -->  0.2
i: 1   -->  [21 - 40]  -->  0.4
i: 2   -->  [41 - 60]  -->  0.6
i: 3   -->  [61 - 80]  -->  0.8
i: 4   -->  [81 - 100] -->  1
该值通过以下方式计算:
(i+1)/BANDS\u NUMBER
,其中
i
是假设循环的索引

然后我有一个输入
n
,它的值在
[minValue,maxValue]=[01100]
范围内

我想要的是与这个数字相关的刻度值。 例如,如果:

n = 0  --> scaleValue = 0.2 
n = 10 --> scaleValue = 0.2 
n = 20 --> scaleValue = 0.2 
n = 35 --> scaleValue = 0.4
n = 68 --> scaleValue = 0.8 
n = 99 --> scaleValue = 1
...
如何创建这样的函数?我想象这样一个函数:

function map(n, minValue, maxValue, bandsNumber) {
  const scaleValue = ...
  return scaleValue
}
这里的所有值都是示例,我希望所有值都与任何其他值一起工作


我不知道该怎么做。我需要一些帮助…

您可以使用本机的
数组.map
函数映射每个值

大概是这样的:

const vals=[
[0, 20],
[21, 40],
[41, 60],
[61, 80],
[81, 100],
];
常数带数=5;
const result=vals.map((范围、索引)=>(索引+1)/BANDS\u编号);

控制台日志(结果)您可以采用一个公式,该公式采用范围和插槽,并返回一个标准化值

由于范围有点太长(最后一个值包含在间隔中),因此需要检查最后一个值,并防止获取所需间隔之外的下一个值

函数规格化(最小值、最大值、带数、n){
返回n==最大值
1.
:数学地板(1+((n-最小值)/(最大-最小值))*频带)/频带;
}
// 0.2 0.2 0.4 0.4 0.8 1 1
log(…[0,10,20,35,68,99100].map(normalize.bind(null,01000,5))Nina Scholz的错了。对于值
20
,她的normalize函数返回
0.4
,而不是
0.2

函数规格化(最小值、最大值、带数、n){
返回n==最大值
1.
:数学地板(1+((n-最小值)/(最大-最小值))*频带)/频带;
}

log(标准化(0,100,5,20));//预期为0.2,实际为0.4
第一组包含21项,而其他组包含19项,这正常吗?@KévinBibollet第一组包含21项,倒数第二组包含20项,而不是19项。@KévinBibollet Ye,如果集合不包含相同数量的元素,这不是问题。集合不包含相同数量的元素,这可能不是问题,但您必须指出如何分配范围。在您的示例中,您确定一个附加元素属于第一个集合。总是这样吗?如果有两个或更多的额外元素呢?谢谢,但我想要的是有点不同。我更喜欢你的函数变成那样
函数规格化(minValue,maxValue,bandsNumber,n){…}