2016-11-19 25 views
2

各文字が文字列に何回表示されるかを数えなければなりません。 大文字と小文字を区別しません。例えば

VAR STR = "aaaAAAbbB"
印刷う "A:6、B:3"
これは私が持っているものであるが、それは別として、下部ケースと上部ケースをカウントします。
JavaScript文字数大文字小文字の区別がありません

 var string = document.getElementById("text").value 
     var counts = {}; 
     var ch, index, length, count; 
     for (index = 0, length = string.length; index < length; index++) 
     { 
      ch = string.charAt(index); 
      count = counts[ch]; 
      counts[ch] = count ? count + 1 : 1; 
     } 
     for (ch in counts) 
     { 
      console.log(ch+" count: "+counts[ch]); 
     } 

答えて

7

あなたがカウントのためupperまたはlowerケースに文字を変更することができます。

ch = string.charAt(index).toUpperCase(); 
//      ^^^^^^^^^^^^^^ 

var string = "aaaAAAbbB"; 
 
var counts = {}; 
 
var ch, index, length, count; 
 
for (index = 0, length = string.length; index < length; index++) { 
 
    ch = string.charAt(index).toUpperCase(); 
 
    count = counts[ch]; 
 
    counts[ch] = count ? count + 1 : 1; 
 
} 
 
for (ch in counts) { 
 
    console.log(ch + " count: " + counts[ch]); 
 
}

コンパクトなスタイル

var string = "aaaAAAbbB", 
 
    counts = {}; 
 

 
string.split('').forEach(function (c) { 
 
    counts[c.toUpperCase()] = (counts[c.toUpperCase()] || 0) + 1; 
 
}); 
 

 
console.log(counts);

+1

ありがとう、私はドンなぜ私はそれについて考えなかったのか分かりません。 – Cheese

0

あなたの問題を解決するために、私は単純に使用します

string.toLowerCase(); 

次に、各文字をカウントできます。

私はあなたのコードを変更:

var string = document.getElementById("text").value.toLowerCase(); 
    var counts = {}; 
    var ch, index, length, count; 
    for (index = 0, length = string.length; index < length; index++) 
    { 
     ch = string.charAt(index); 
     count = counts[ch]; 
     counts[ch] = count ? count + 1 : 1; 
    } 
    for (ch in counts) 
    { 
     console.log(ch+" count: "+counts[ch]); 
    } 
0

あなたは を小文字にすべてのテキストを変更.toLowerCase()方法を、使用することができます次に、あなたのコードは次のようになります。

var string = document.getElementById("text").value.toLowerCase() 
    var counts = {}; 
    var ch, index, length, count; 
    for (index = 0, length = string.length; index < length; index++) 
    { 
     ch = string.charAt(index); 
     count = counts[ch]; 
     counts[ch] = count ? count + 1 : 1; 
    } 
    for (ch in counts) 
    { 
     console.log(ch+" count: "+counts[ch]); 
    } 
0

var str = "aaaAAAbbB"; 
 
var result = {}; 
 
//lowercase so they are all insensative and split to get an array. loop over the array 
 
str.toLowerCase().split('').forEach(function(element, index, array){ 
 
    //if not processed before, perform count 
 
    if (!result[element]) { 
 
    result[element] = array.filter(function(element2){ return element2 === element; }).length; 
 
    } 
 
}); 
 

 
console.log(result);

関連する問題