-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");

(假设您想使用 输出到 textarea 元素id="NumCount",这就是您在小提琴中所拥有的。)

于 2013-03-05T03:04:36.940 回答