javascript - 如何在javascript中对数组进行统计分类?

标签 javascript jquery math statistics classification

我的数组中有一堆数字,我需要对它们进行一些统计。我需要知道数组中每个数字有多少个。

这是数组:

myArray =
[2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 27, 27, 28, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 40, 40, 40, 41, 41, 42, 42, 42, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 55, 55, 56, 57, 57, 57, 57, 57, 57, 57, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, 71, 71, 71, 71, 71, 71, 71, 72, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 77, 78, 78, 79, 79, 80, 80, 81, 81, 81, 81, 81, 82, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, 91, 92, 93, 94, 95, 95, 95, 95, 95, 96, 96, 96, 96, 97, 97, 99, 99, 99, 99, 99, 101, 101, 102, 102, 103, 103, 105, 105, 105, 106, 107, 107, 108, 108, 109, 109, 109, 109, 110, 112, 112, 113, 113, 113, 114, 114, 115, 116, 116, 117, 118, 120, 121, 121, 121, 122, 122, 123, 123, 123, 124, 124, 124, 124, 125, 126, 127, 128, 129, 130, 130, 131, 131, 131, 131, 132, 133, 133, 134, 134, 134, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 141, 141, 142, 142, 143, 144, 144, 144, 144, 145, 150, 150, 153, 155, 159, 160, 160, 161, 162, 164, 164, 166, 176, 180, 180, 180, 181, 181, 187, 191, 192, 193, 194, 197, 200, 203, 211, 216, 224, 251, 280, 333]

这是我当前用来解析它的内容(效果不是很好):

    for (var key in myArray){
        var obj = myArray[key];

        var count = 0;
        while(obj < 30){
            myArrayStats[0] = count;
            obj++;
        }
        while(obj > 30 && obj < 40){
            myArrayStats[1] = count;
            obj++;
        }
        //etc....
    }

使用对象文字创建一个新数组会更好、更容易使用,但我不知道该怎么做。

最佳答案

无论您的数组是否已排序,这都有效,但它不应该比任何利用数组已排序这一事实的算法慢得多:

var myArrayStats = [];
for(var i = myArray.length; i--;)
    myArrayStats[myArray[i]] = (myArrayStats[myArray[i]] || 0) + 1;

console.log(myArrayStats[6]);  // Outputs 7
console.log(myArrayStats[10]); // Outputs 5
console.log(myArrayStats[20]); // Outputs 5

如果您只想对原始数组的一部分执行此操作,请使用 slice()获取所需的数组部分,然后对该数组执行与上面相同的操作:

var mySubArray = myArray.slice(0,30);
var myArrayStats = [];
for(var i = mySubArray.length; i--;)
    myArrayStats[mySubArray[i]] = (myArrayStats[mySubArray[i]] || 0) + 1;

console.log(myArrayStats[6]);  // Outputs 7
console.log(myArrayStats[9]);  // Outputs 7
console.log(myArrayStats[10]); // Outputs undefined

关于javascript - 如何在javascript中对数组进行统计分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585855/

相关文章:

c - 基于c的小型 vector 和矩阵库的推荐

javascript - ng-model 在输入和显示时操纵值

javascript - 一个类的所有成员的onclick函数

javascript - 监听外部 JavaScript 文件中的变量更改

python - 使用 linalg.lstsq (numpy) 时出现数学域错误

Python 代码优化(比 C 慢 20 倍)

javascript - 确认删除提醒

javascript - Sequelize : TypeError: Cannot read property '_modelAttribute' of undefined

jquery - PhoneGap Jquery 滑动不良

javascript - 如何在功能上加入延迟?