将一系列数字转换为100的一部分

时间:2014-07-16 20:52:06

标签: javascript

我有一个数字列表(任何长度),范围从0到100,包括重复。我需要将这些数字转换为100的部分。

例如: [25,50]变为[33.333,66.666]

[25,50,50]变为[20,40,40]

什么算法最适合这个?

4 个答案:

答案 0 :(得分:1)

试试这个:

console.log(33.333 - 33.333 % 25); // 50

%是MODULO运算符。

Number.prototype.range = function(a) {
    return this - this % a;
}

console.log((33.333).range(25)); // 25;
console.log((66.666).range(25)); // 50;

在数组中使用这样的地图:

console.log([33.333, 66.666].map(function(a) {
    return a.range(25);
}));

Demo

答案 1 :(得分:1)

您需要计算数组中值的总和 - 然后您可以将数组中的每个值除以该总和,然后乘以100.

答案 2 :(得分:0)

这可以通过计算数组的总和然后将每个值除以该值来完成。可以使用Array.reduceArray.map来轻松完成,以创建具有最终输出的新数组。这是一个例子:

var arr1 = [25, 50];
var arr2 = [25, 50, 50];

function proportion(arr) {
  var sum = arr.reduce(function(prev, cur){
    return prev + cur;
  });

  var result = arr.map(function(val){
    return (val/sum)*100;
  });

  return result;
}


console.log(proportion(arr1)); // [33.33333333333333, 66.66666666666666]
console.log(proportion(arr2)); // [20, 40, 40]

JSBin:http://jsbin.com/texuc/1/edit

答案 3 :(得分:0)

解决此问题的最简单方法是对数组求和,将每个值作为该总和的一部分,然后乘以100.

这段代码可以解决问题。

var inputArray = [25, 50, 50];
var outputArray = [];
var total = 0;

for (var i=0; i<(inputArray.length); i++) {
    total += inputArray[i];
}
for (var i=0; i<(inputArray.length); i++) {
    outputArray[i] = ((inputArray[i])/total) * 100;
}