Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 Math.min/max.apply设置值为新范围的百分比_Javascript_Math_Range - Fatal编程技术网

Javascript Math.min/max.apply设置值为新范围的百分比

Javascript Math.min/max.apply设置值为新范围的百分比,javascript,math,range,Javascript,Math,Range,我有一个数组值列表 var v=[0.009865,0.009866,0.009309,0.009831,0.009919,0.009965,0.009806,0.009509,0.009731,0.009888]; 我计算了最小值、最大值以及两者之间的差值,以确定范围 var max=Math.max.apply(this,v)/100; var min=Math.min.apply(this,v)/100; var dif=max-min; console.dir({'max':max,

我有一个数组值列表

var v=[0.009865,0.009866,0.009309,0.009831,0.009919,0.009965,0.009806,0.009509,0.009731,0.009888];
我计算了最小值、最大值以及两者之间的差值,以确定范围

var max=Math.max.apply(this,v)/100;
var min=Math.min.apply(this,v)/100;
var dif=max-min;

console.dir({'max':max,'min':min,'dif':dif});
console.dir显示

max: 0.00009965
min: 0.00009308999999999999
dif: 0.000006560000000000005
然后我循环遍历每个值,试图将它们转换为范围内的百分比

(通过找出当前值比最小值大多少,将答案除以dif并将结果乘以100得到百分比)

我做错了什么


我的数学参考:设置
max
min
时,不要除以
100

var max=Math.max.apply(this,v);
var min=Math.min.apply(this,v);
输出:

84.7560975609757
84.90853658536585
0
79.57317073170726
92.9878048780489
100
75.76219512195132
30.487804878048845
64.32926829268297
88.26219512195112 

设置
max
min
时,不要除以
100

var max=Math.max.apply(this,v);
var min=Math.min.apply(this,v);
输出:

84.7560975609757
84.90853658536585
0
79.57317073170726
92.9878048780489
100
75.76219512195132
30.487804878048845
64.32926829268297
88.26219512195112 

您可以使用
Array.map
,例如:

var v= [0.009865,0.009866,0.009309,0.009831,0.009919,0.009965,
        0.009806,0.009509,0.009731,0.009888]
   ,vv= v.map( function (a) { 
                return ( ( Math.abs(a-this.min) / this.diff() )*100 )
                        .toFixed(2); 
               },
               {min: Math.min.apply(null, v), 
                max: Math.max.apply(null, v),
                diff: function () { return this.max-this.min; } }
              );
 // => returns vv
 // ["84.76", "84.91", "0.00", "79.57", "92.99", "100.00", 
 //  "75.76", "30.49", "64.33", "88.26"]

Array.prototype.map

上,您可以使用
Array.map
,类似于:

var v= [0.009865,0.009866,0.009309,0.009831,0.009919,0.009965,
        0.009806,0.009509,0.009731,0.009888]
   ,vv= v.map( function (a) { 
                return ( ( Math.abs(a-this.min) / this.diff() )*100 )
                        .toFixed(2); 
               },
               {min: Math.min.apply(null, v), 
                max: Math.max.apply(null, v),
                diff: function () { return this.max-this.min; } }
              );
 // => returns vv
 // ["84.76", "84.91", "0.00", "79.57", "92.99", "100.00", 
 //  "75.76", "30.49", "64.33", "88.26"]

Array.prototype.map

上,你能给出一个与我的问题无关的函数吗?当你设置
max
min
时,为什么要除以100?这就是问题所在。为什么循环从
01
开始而不是从零开始?@T.J.Crowder:可能是错误的(应该是
Math
),但是它是不相关的,因为
min
max
不关心。你能在一个函数中给出与我的问题无关的一切吗?当你设置
max
min
时,为什么要除以100?这就是问题所在。为什么你的循环从
01
开始而不是从零开始?@T.J.Crowder:这可能是错误的(应该是
Math
),但它是不相关的,因为
min
max
不在乎