-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 回答