現在、次のような配列を取得しました。
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
等
現在、次のような配列を取得しました。
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
等
const counts = {};
const sampleArray = ['a', 'a', 'b', 'c'];
sampleArray.forEach(function (x) { counts[x] = (counts[x] || 0) + 1; });
console.log(counts)
このようなもの:
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 ループを使用してください。
この(非常に古い)質問に出くわしました。興味深いことに、最も明白でエレガントなソリューション (私見) がありません: 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}
ただし、これは読みにくい/理解しにくい可能性があるため、おそらく最初のバージョンに固執する必要があります。
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();
高階関数を使用して操作を行うこともできます。 この回答を参照してください
カウントを含むオブジェクトを持つことができます。リストをたどって、各要素のカウントを増やします。
var counts = {};
uniqueCount.forEach(function(element) {
counts[element] = (counts[element] || 0) + 1;
});
for (var element in counts) {
console.log(element + ' = ' + counts[element]);
}
forEach の for/while ループを使用せずに解決できます。
function myCounter(inputWords) {
return inputWords.reduce( (countWords, word) => {
countWords[word] = ++countWords[word] || 1;
return countWords;
}, {});
}
それがあなたを助けることを願っています!
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}`);
}
文字列で提供された文字を数える
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()
arr
一意のセットをキーとして保持するオブジェクトを宣言します。arr
map を使用して、配列を 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