将数字数组映射为百分比,总值等于100%

时间:2016-03-09 09:49:37

标签: javascript arrays mapping logarithm

您好,我不确定如何标题,但我的问题是我试图找到一种方法将数字数组映射到受最小和最大百分比限制的百分比数组。除此之外,我还希望总百分比加起来达到100%。具体来说,这与NBA的彩票赔率有关。我想采取

nbaLotteryTeamsWinAmount2013 = [20, 21, 24, 25, 27, 28, 29, 29, 31, 33, 34, 34, 41, 43];

并将其转换为.5%至25%

的百分比

nbaLotteryOdds2013 = [.25, ..., 0.5];

我已经尝试了一些映射它的方法,但我得到了更多的线性转换,但我认为我需要一个logrithmic scale或其他东西。这是我尝试过的。

function offset(array, selectedMin, selectedMax) {
  var minValue = array.reduce(min);
  var maxValue = array.reduce(max);
  var selectedSpread = selectedMax - selectedMin;

  array = array.map(function(item) {
    return (item - minValue) / (maxValue - minValue) * selectedSpread + selectedMin;
  });

}

offset(nbaLotteryTeamsWinAmount2013, 0, 25);

结果是

[0, 1.0869565217391304, 4.3478260869565215, 5.434782608695652, 7.608695652173914, 8.695652173913043, 9.782608695652174, 9.782608695652174, 11.956521739130435, 14.130434782608695, 15.217391304347828, 15.217391304347828, 22.82608695652174, 25]

这导致了一个线性比例,其中数字看起来是相同的,但没有加到正确的数量。 我想在javascript中这样做(只是因为我知道它更好),但任何语言或提示都会受到赞赏。

0 个答案:

没有答案