Javascript嵌套循环问题?

时间:2012-06-27 15:16:12

标签: javascript loops cryptography frequency

我试图创建一小段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;
        }
    }
}

1 个答案:

答案 0 :(得分: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 }