5

重複の可能性:
Javascriptの配列で一致する値をカウントする方法

私は要素を持つ配列を持っています、

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

次のように配列要素をカウントしたいのですが、

答え:

2回→3回
1回→1回
3回→4回
4回→1回
5回→1回

注 : 各値カウントは 1 回だけ出力する必要があります。

4

4 に答える 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"ます。

あなたの例の配列を考えると、これは問題になりません。

于 2012-10-05T15:21:03.017 に答える
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/

于 2012-10-05T15:27:25.090 に答える
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);​

ライブデモ。

注: 古いブラウザではシムの必要性を減らします。

于 2012-10-05T15:41:12.700 に答える
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");
}
于 2012-10-05T15:29:35.977 に答える