如何用数组生成介于0和1之间的比例数?

时间:2013-05-06 16:23:52

标签: javascript arrays

我想生成一个介于0和1之间的比例数组,其中包含一个具有不同大小值的销售数组。

例如,如果我有值[1, 80, 2000],那么像[0.1, 0.4, 1]这样的数组就可以了。

2 个答案:

答案 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中没有了......

编辑:详细了解这里发生的事情: 问题分为两个步骤。

  1. 找到数组中的最大数字
  2. 将每个数组项计算为最大项的一部分
  3. 第一步,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