2

私は、オンラインの著者識別のためのメトリックを作成するためのスクリプトに取り組んでいます。私が文献で出くわしたことの1つは、大文字または小文字に関係なく、各文字の頻度(aの数、bの数など)を数えることです。文字ごとに個別のステートメントを作成したくないので、ループしようとしていますが、理解できません。私が思いついた最善の方法は、ASCII文字コードを16進数に変換することです。そうすれば、奇跡が起こることを願っています。

これまでのところ、私は持っています

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
}   

しかしもちろん、そうすると、16進数は、必要な文字の16進コードではなく、16進数として解釈されます。

4

1 に答える 1

5

16進数に変換する理由はわかりませんが、文字列の文字をループして、ハッシュとして使用されるオブジェクトを使用して各文字が何回出現したかを追跡できます。

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 に答える