149

現在、次のような配列を取得しました。

var uniqueCount = Array();

いくつかの手順の後、私の配列は次のようになります。

uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];

配列内に a,b,c がいくつあるかをどうやって数えますか? 次のような結果が必要です。

a = 3
b = 1
c = 2
d = 2

4

34 に答える 34

409

const counts = {};
const sampleArray = ['a', 'a', 'b', 'c'];
sampleArray.forEach(function (x) { counts[x] = (counts[x] || 0) + 1; });
console.log(counts)

于 2013-10-16T04:33:24.687 に答える
90

このようなもの:

uniqueCount = ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"];
var count = {};
uniqueCount.forEach(function(i) { count[i] = (count[i]||0) + 1;});
console.log(count);

古いブラウザでこれを壊したくない場合は、 forEach の代わりに単純な for ループを使用してください。

于 2013-10-16T04:33:23.673 に答える
61

この(非常に古い)質問に出くわしました。興味深いことに、最も明白でエレガントなソリューション (私見) がありません: Array.prototype.reduce(...)。2011 年頃 (IE) またはそれ以前 (その他すべて) から、すべての主要なブラウザーがこの機能をサポートしています。

var arr = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = arr.reduce(function(prev, cur) {
  prev[cur] = (prev[cur] || 0) + 1;
  return prev;
}, {});

// map is an associative array mapping the elements to their frequency:
console.log(map);
// prints {"a": 3, "b": 2, "c": 2, "d": 2, "e": 2, "f": 1, "g": 1, "h": 3}

編集:

アロー関数でコンマ演算子を使用することにより、1 行のコードで記述できます。

var arr = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = arr.reduce((cnt, cur) => (cnt[cur] = cnt[cur] + 1 || 1, cnt), {});

// map is an associative array mapping the elements to their frequency:
console.log(map);
// prints {"a": 3, "b": 2, "c": 2, "d": 2, "e": 2, "f": 1, "g": 1, "h": 3}

ただし、これは読みにくい/理解しにくい可能性があるため、おそらく最初のバージョンに固執する必要があります。

于 2015-10-01T11:38:06.317 に答える
34

function count() {
    array_elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];

    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');
    }

}

count();

デモフィドル

高階関数を使用して操作を行うこともできます。 この回答を参照してください

于 2013-10-16T04:35:30.613 に答える
4

カウントを含むオブジェクトを持つことができます。リストをたどって、各要素のカウントを増やします。

var counts = {};

uniqueCount.forEach(function(element) {
  counts[element] = (counts[element] || 0) + 1;
});

for (var element in counts) {
  console.log(element + ' = ' + counts[element]);
} 
于 2013-10-16T04:34:16.227 に答える
4

forEach の for/while ループを使用せずに解決できます。

function myCounter(inputWords) {        
    return inputWords.reduce( (countWords, word) => {
        countWords[word] = ++countWords[word] || 1;
        return countWords;
    }, {});
}

それがあなたを助けることを願っています!

于 2016-09-08T17:34:05.960 に答える
1
var uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
// here we will collect only unique items from the array
var uniqueChars = [];

// iterate through each item of uniqueCount
for (i of uniqueCount) {
// if this is an item that was not earlier in uniqueCount, 
// put it into the uniqueChars array
  if (uniqueChars.indexOf(i) == -1) {
    uniqueChars.push(i);
  } 
}
// after iterating through all uniqueCount take each item in uniqueChars
// and compare it with each item in uniqueCount. If this uniqueChars item 
// corresponds to an item in uniqueCount, increase letterAccumulator by one.
for (x of uniqueChars) {
  let letterAccumulator = 0;
  for (i of uniqueCount) {
    if (i == x) {letterAccumulator++;}
  }
  console.log(`${x} = ${letterAccumulator}`);
}
于 2017-03-24T19:30:07.287 に答える
0

文字列で提供された文字を数える

function countTheElements(){
    
    var str = "ssdefrcgfrdesxfdrgs";
    var arr = [];
    var count = 0;
    
    for(var i=0;i<str.length;i++){
        arr.push(str[i]);
        
    }
        arr.sort();
    for(var i=0;i<arr.length;i++){     
        if(arr[i] == arr[i-1]){
            count++;
        }else{        
            count = 1;        
        }
            if(arr[i] != arr[i+1]){
                console.log(arr[i] +": "+(count));
            }    
            
       }
    }
        countTheElements()
于 2021-02-08T12:47:38.527 に答える
0

arr一意のセットをキーとして保持するオブジェクトを宣言します。arrmap を使用して、配列を 1 回ループすることでデータを取り込みます。キーが以前に見つからなかった場合は、キーを追加し、ゼロの値を割り当てます。各反復で、キーの値をインクリメントします。

与えられた testArray:

var testArray = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];

解決:

var arr = {};
testArray.map(x=>{ if(typeof(arr[x])=="undefined") arr[x]=0; arr[x]++;});

JSON.stringify(arr)出力します

{"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}

Object.keys(arr)戻ります["a","b","c","d","e","f","g","h"]

任意のアイテムの出現を見つけるには、たとえば barr['b']が出力されます2

于 2019-10-18T14:22:49.253 に答える