Javascript 查找词频
我对JavaScript完全不熟悉,对如何制作单词计数器有疑问。我试图根据句子中每个单词的大小,按空格分割,为关联数组创建一个键/值对列表。关键是单词,值是句子中每个单词的计数。例如,“男人走向商店”的句子应该有如下输出: 2 男1 步行1 至1 商店1 但是,当我转到console.log数组时,它会打印出如下内容: 未定义:(随机数) 这是因为键/值对实际上没有被定义,还是代码只定义一次,然后将其全部添加到一对中?老实说,这让我觉得自己很傻。任何指向正确方向的指示都将不胜感激。我的代码如下:Javascript 查找词频,javascript,Javascript,我对JavaScript完全不熟悉,对如何制作单词计数器有疑问。我试图根据句子中每个单词的大小,按空格分割,为关联数组创建一个键/值对列表。关键是单词,值是句子中每个单词的计数。例如,“男人走向商店”的句子应该有如下输出: 2 男1 步行1 至1 商店1 但是,当我转到console.log数组时,它会打印出如下内容: 未定义:(随机数) 这是因为键/值对实际上没有被定义,还是代码只定义一次,然后将其全部添加到一对中?老实说,这让我觉得自己很傻。任何指向正确方向的指示都将不胜感激。我的代码如下:
函数calcWordFrequencies(用户输入){
var asscArray={};
//var userInput=prompt(“输入一个句子,程序将对每个单词进行计数。”);
userInput.split(“”);
for(userInput的var项){
if(关联中的用户输入[项目]){
asscArray[userInput[items]]+=1;
}
否则{
asscArray[userInput[items]]=1;
}
}
对于(关联账户中的var项目){
console.log(项+”:“+asscArray[项]+”\n”);
}
}
calcWordFrequencies(“该男子走向商店”)代码>
您必须将userInput
分配给split
循环应该是for in
foruserInput
使用toLowerCase
忽略大小写
函数calcWordFrequencies(用户输入){
var asscArray={};
//var userInput=prompt(“输入一个句子,程序将对每个单词进行计数。”);
userInput=userInput.split(“”);
for(userInput中的var项){
var char=userInput[items].toLowerCase();
if(字符在asscArray中){
asscArray[char]+=1;
}
否则{
asscArray[char]=1;
}
}
对于(关联账户中的var项目){
console.log(项+”:“+asscArray[项]+”\n”);
}
}
calcWordFrequencies(“该男子走向商店”)代码>您可以使用
const sentence = "The man walked to the store";
// use split to convert sentence into an array, split by a space
const wordCounter = sentence.split(' ').reduce((accum, word) => {
if (!accum[word]) { // if a property of the word doesn't currently exist, create it and set value to 1
accum[word] = 1;
} else { // if a property of the word does exist, increment the current value
accum[word]++;
}
return accum;
}, {}) // the accum starts of as an empty object
控制台记录wordCounter的结果将是:
{
The: 1
man: 1
store: 1
the: 1
to: 1
walked: 1
}
您可以使用映射
将每个单词映射到其计数:
让res=“somethingsomethingelse somethingsomethingelse”
.拆分(“”)
.减少(
(a,el)=>(a.set(el,(a.get(el)+1 | | 1)),a),
新地图
);
//仅用于输出目的
console.log([…res])
您需要userInput=userInput.split(“”)代码>调试!学会调试for(userInput的var项){console.log(items,userInput[items])
for循环不使用索引,而是使用实际数组元素: