我想生成一个介于0和1之间的比例数组,其中包含一个具有不同大小值的销售数组。
例如,如果我有值[1, 80, 2000]
,那么像[0.1, 0.4, 1]
这样的数组就可以了。
答案 0 :(得分:3)
现代功能方法:
var r=[1, 80, 2000] ;
r.map(function(a){
return a/this;
}, Math.max.apply(0,r) );
//==[0.0005,0.04,1]
我认为数学在OP中没有了......
编辑:详细了解这里发生的事情: 问题分为两个步骤。
第一步,JS提供了Math.max函数。要使用带数组的基于参数的函数,使用函数的apply()方法,并将0作为“this”传递,但它并未真正使用;它只需要成为一种东西。
第二步将每个项目与步骤#1中找到的数字进行比较,使用Array.map方法迭代Array并返回Array中每个项目的操作结果。由于Array.map()可以接受可选的“this”参数,因此步骤#1中的最大数字将作为“this”传递,以避免性能抢夺函数关闭。
答案 1 :(得分:0)
虽然目前尚不清楚,原始数组与生成的数组之间应该是什么关系。我假设您想要创建项目总和(比例)的分数:
试试这个:
function generateProportion(arr){
//find out the total sum..
var total = 0;
for(var k=0;k <arr.length;k++)
total += arr[k];
//push the ratios into the new array with double precison..
var newArr = new Array();
for(var i=0;i< arr.length; i++)
newArr.push((arr[i]/total).toFixed(2));
console.log(newArr);
return newArr;
}
并将其称为:
var a = [1, 80, 2000];
generateProportion(a);
请参阅此fiddle