Javascript 在JS中计算直方图的值的最佳方法是什么?

Javascript 在JS中计算直方图的值的最佳方法是什么?,javascript,arrays,performance,for-loop,Javascript,Arrays,Performance,For Loop,我正在尝试创建随机生成数据的直方图,因此目前我正在执行以下操作: 假设创建了以下数组: returns = [0.0024, 0.0231, 0.014, 0.0005, -0.008] 我使用以下方法浏览阵列: returnsRounded[x] = Math.round(returns[x] * 1000) / 1000; 这将使我得到回报: returnsRounded = [0.002, 0.023, 0.014, 0.001, -0.008] 现在,我正在尝试计算每个特定值的数

我正在尝试创建随机生成数据的直方图,因此目前我正在执行以下操作:

假设创建了以下数组:

returns = [0.0024, 0.0231, 0.014, 0.0005, -0.008]
我使用以下方法浏览阵列:

 returnsRounded[x] = Math.round(returns[x] * 1000) / 1000;
这将使我得到回报:

returnsRounded = [0.002, 0.023, 0.014, 0.001, -0.008]
现在,我正在尝试计算每个特定值的数量(在数万个值的数组中,因此我将执行类似于以下操作的低效操作:

switch (returnsRounded) {
    case -0.040:
        arr[1]++;
        break;
    case -0.038:
        arr[2]++;
        break;
    // ... and so on.
}
然后将计算出的值插入我的柱状图(它的工作原理类似于条形图——从这个意义上说,它只比较计数。我不能只插入一个数组就得到柱状图

那么,有没有比我现在做的更快或更漂亮的更有效的方法来计算数组中舍入数的出现次数呢

谢谢

编辑:我想出了一个比我现在的方法好得多的方法,尽管我不知道它是否仍然很好。这里有一把小提琴:


计算频率的关键是存储阵列中的元素:

function frequencies(values, binsize) {
    var mapped = values.map(function(val) { 
       return Math.ceil(val / binsize) -1; 
    });
    return mapped.reduce(function (freqs, val, i) {
      var bin = (binsize * val);
      freqs[bin] ? freqs[bin]++ : freqs[bin] = 1;
      return freqs;
    }, {});
}
函数
frequencies
创建一个字典(对象),其中每个键/值对都是bin/计数,例如:

Object { 0: 60, 1: 43, 2: 11, -0.2: 68, -2: 11, -2.2: 10, -2.4000000000000004: 4, -2.6: 5, -2.8000000000000003: 1, -3: 1, 18 more… }

在此

中提供了一个带有简单直方图的完整示例,只需使用一个带有键的对象,而不是几十个变量和事例?!请演示如何将计数的值插入直方图。如果API合理,它应该会提示您如何操作。我使用的是自定义画布。我可以插入值的频率,如下所示:[1,2,3,6,9,15,18,19,20,19,16,12,10,8,5,4,3,2,2,2,1,1]那么你说的“我不能只插入一个数组”是什么意思?那似乎是一个频率数组。我需要得到频率。这就是这个问题的内容——如何得到一个数字的频率。