如何在JavaScript中通过每个元素计算数组元素的数量

5
可能重复:如何计算JavaScript数组中匹配值的数量 我有一个元素数组,如下所示:
array_elements = ["2","1","2","2","3","4","3","3","3","5"];
我想按以下方式计算数组元素的数量:
答案:
2出现--> 3次
1出现--> 1次
3出现--> 4次
4出现--> 1次
5出现--> 1次

注意:每个值的计数只应打印一次。

你想在Ruby还是JavaScript中进行计数?如果是后者,为什么使用Ruby标签? - raina77ow
你知道如何编写for循环并使用对象吗?看起来像是基础作业101类型的问题。 - epascarello
1
重复问题:https://dev59.com/eXRA5IYBdhLWcg3wvgsb 和 http://stackoverflow.com/questions/2228362/how-to-count-matching-values-in-array-of-javascript - SDC
1
对于喜欢花哨词汇的人来说,这是一个直方图 - jbabey
4个回答

21
var counts = {};

for (var i = 0; i < array.length; i++)
    counts[array[i]] = (counts[array[i]] + 1) || 1;


console.log(counts);

假设数组项的toString表示形式是可以接受的。例如,它将把1视为与"1"相同。

根据您的示例数组,这不会成为问题。


11

你可以对元素进行排序,然后循环遍历它们:

array_elements = ["2", "1", "2", "2", "3", "4", "3", "3", "3", "5"];

array_elements.sort();

var current = null;
var cnt = 0;
for (var i = 0; i < array_elements.length; i++) {
    if (array_elements[i] != current) {
        if (cnt > 0) {
            document.write(current + ' comes --> ' + cnt + ' times<br>');
        }
        current = array_elements[i];
        cnt = 1;
    } else {
        cnt++;
    }
}
if (cnt > 0) {
    document.write(current + ' comes --> ' + cnt + ' times');
}

示例:http://jsfiddle.net/Guffa/aQsuP/


5
var array_elements = ["2","1","2","2","3","4","3","3","3","5"];

var result = array_elements.reduce(function(p, c){
    if (c in p) {
       p[c]++;
    } else {
       p[c]=1;
    }
    return p;
}, {});

​console.log(result);​

这是演示页面。

注意:对于旧浏览器,需要使用shim来减少代码量。


2
var arr = ["2","1","2","2","3","4","3","3","3","5"];
var k = {};

//push into hashtable
for(i in arr){
 k[arr[i]]=(k[arr[i]]||0)+1; //increments count if element already exists
}

//result
for(var j in k) {
 console.log(j+" comes -> "+k[j]+" times");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接