-2

私は、個人的な使用のために、テキスト内の各文字の数を数える小さな JavaScript を作成しようとしています。以前のバージョンでは、文字ごとに個別のループがあり、機能しましたが、かなり長く、作成するのが面倒でした。だから私はもっと短いものを作ろうとしましたが、なぜうまくいかないのかわかりません。ありがとう!

var text = prompt("Enter Text","");
// Remove Spaces

var text = text.toUpperCase();
// Get the Text Length

var textL = text.length;
// Create the Hashtable

var hashtable = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
// Define the Latin Alphabet

var alphabet = "abcdefghijklmnopqrstuvwxyz";
// Nested loop to find frequencies and input them into the hashtable

for (d=0; d<=25; d++) {
    for (i=0; i<=textL; i++){
        if (text.charAt(i) === alphabet.charAt(d)){
            hashtable[d] = hashtable[d] + 1;
        }
    }
}
4

1 に答える 1

0

ECMAScript 5 をサポートする意思がある場合は、新しいものを使用するmapreduce、はるかに小さなコードを使用することができます。

文字列を指定するsplitと、配列に変換できます。事前.replace(/\s/g, '')に空白を削除してからreduce、各文字を反復処理して結果を返します。結果はオブジェクトに保持でき、各プロパティ名は文字です。

var str = "SampleText".toLowerCase().replace(/\s/g,'');
var counts = str.split('').reduce(function(acc, x) {
   acc[x] = (acc[x] || 0) + 1;
   return acc;
}, {});

出力:

{ a: 1,
  e: 2,
  l: 1,
  m: 1,
  p: 1,
  s: 1,
  t: 2,
  x: 1 }
于 2012-06-27T15:34:54.960 に答える