我试图创建一小段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;
}
}
}
答案 0 :(得分:0)
如果您愿意支持ECMAScript 5,则可以使用新的map
或reduce
来获得更少的代码。
给定一个字符串,你可以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 }