单词频率计数,修复标准属性的错误

Boo*_*ter 3 javascript arrays

我正在尝试构建一个javascript函数,它可以计算输入数组中每个单词的出现次数.

示例:

输入

a=["a","booster","booster","constructor","adam","adam","adam","adam"]
Run Code Online (Sandbox Code Playgroud)

输出:

"a":1
"booster":2
"constructor":1
"adam":4
Run Code Online (Sandbox Code Playgroud)

输出应该是相似的.

我是javascript的新手,我试图使用dict.但是对象有一个叫做"构造函数"的属性,所以cnt ["constructor"]似乎不起作用.

这是我的代码和结果:

var cnt={};
console.log("constructor");

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

for(var item in cnt)
    console.log(item+":"+cnt[item]);
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

您可以看到1作为字符串添加到cnt的构造函数中.

Den*_*ret 13

function count(arr){
  return arr.reduce(function(m,e){
    m[e] = (+m[e]||0)+1; return m
  },{});
}
Run Code Online (Sandbox Code Playgroud)

背后的想法是

  • 采用reduce高雅
  • m[e]使用+m[e]避免constructor(或toString)问题转换为数字

示范

  • @Booster因为`+"构造函数"`是NaN,所以`(+"constructor"|| 0)`是`0` (3认同)