2

我正在编写一个脚本来创建用于在线作者识别的指标。我在文献中遇到的一件事是计算每个字母的频率(多少个 a、多少个 b 等),与大小写无关。因为我不想为每个字母创建一个单独的语句,所以我试图循环这个东西,但我无法弄清楚。我能想到的最好的方法是将 ASCII 字母代码转换为十六进制,然后……希望奇迹发生。

到目前为止,我有

element = id.toLowerCase();
var hex = 0;
for (k=97; k<122; k++){
    hex = k.toString(16); //gets me to hex
    letter = element.replace(/[^\hex]/g, "")//remove everything but the current letter I'm looking for
    return letter.length // the length of the resulting string is how many times the ltter came up
}   

但当然,当我这样做时,它将十六进制解释为字母十六进制,而不是我想要的字母的十六进制代码。

4

1 回答 1

5

不知道为什么要转换为十六进制,但您可以遍历字符串的字符并跟踪每个字符与用作哈希的对象一起出现的次数:

var element = id.toLowerCase();
var keys = {};

for(var i = 0, len = element.length; i<len; i++) {
    if(keys[element.charAt(i)]) keys[element.charAt(i)]++;
    else keys[element.charAt(i)] = 1;
}

您可以使用数组来做同样的事情,但哈希更快。

于 2012-04-23T18:58:52.743 回答