未定义的数组计数单词:object

时间:2013-03-05 02:52:20

标签: javascript arrays multidimensional-array counting

所以我遇到了一个未定义的数组元素问题。 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");

1 个答案:

答案 0 :(得分: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元素,这就是你在小提琴中所拥有的。)