-1

そのため、未定義の配列要素が発生するという問題が発生しています。1)未定義の配列を機能させることができません 2)単語の出現と回数として配列を出力したい。

var wordCount =[];
splitAT.sort();
alert(splitAT);

for (var i = 0; i < splitAT.length; i++)
{
    if(splitAT[i] in wordCount)
{
wordCount.push(1);
}
else
{
wordCount[splitAT[i]] = 1;
}


document.write('[' + splitAT[i] + '][' + wordCount[i] + ']<br>') 
alert("your next wordcount is");
alert(wordCount); // this is just so i know where i am in the program.
alert("END");
4

1 に答える 1

1

まず、ジョブに適したツールを使用します。wordCount配列ではなくオブジェクトにする必要があります。

var wordCount = {};  // note, curly brackets

...数値配列インデックスではなく、文字列をキーとして使用してアクセスする予定があるためです。(はい、配列はこの目的のために機能しますが、それは配列の意図された目的ではありません。)

次に、ループ内で、現在の単語が既にwordCount存在する場合は、既存の値に 1 を追加します。使用.push(1)しないで、数値的にインデックス付けされた要素の末尾に新しい配列要素を挿入します。

// WRONG:
wordCount.push(1);           // inserts a new element
// RIGHT:
wordCount[splitAT[i]]++;     // increments the current value

それをまとめると、次のように単語を数えます。

var wordCount = {};
splitAT.sort();

for (var i = 0; i < splitAT.length; i++) {
    if(splitAT[i] in wordCount) {
        wordCount[splitAT[i]]++;
    } else {
        wordCount[splitAT[i]] = 1;
    }
}

「単語の出現回数と回数として配列を出力したい。」

結果を出力するには、次のようにします。

var output = [];
for (var k in wordCount)
    output.push("'" + k + "' appears " + wordCount[k] + " time(s).");
document.getElementById("NumCount").value = output.join("\n");

id="NumCount"(フィドルで持っていたものである でtextarea 要素に出力したいと仮定します。)

于 2013-03-05T03:04:36.940 に答える