Javascript 词频计数,使用标准属性修复错误
我正在尝试构建一个javascript函数,该函数将计算输入数组中每个单词的出现次数 例如: 输入 输出:Javascript 词频计数,使用标准属性修复错误,javascript,arrays,Javascript,Arrays,我正在尝试构建一个javascript函数,该函数将计算输入数组中每个单词的出现次数 例如: 输入 输出: "a":1 "booster":2 "constructor":1 "adam":4 输出应该是相同的 我是javascript新手,我尝试使用dict。但是对象有一个名为“构造函数”的属性,所以cnt[“构造函数”]似乎不起作用 以下是我的代码和结果: var cnt={}; console.log("constructor"); for(var i=0;i<a.length;
"a":1
"booster":2
"constructor":1
"adam":4
输出应该是相同的
我是javascript新手,我尝试使用dict。但是对象有一个名为“构造函数”的属性,所以cnt[“构造函数”]似乎不起作用
以下是我的代码和结果:
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]);
var cnt={};
console.log(“构造函数”);
对于(var i=0;i
背后的想法是
- 使用
reduce
实现优雅
- 使用
+m[e]
将m[e]
转换为一个数字,以避免构造函数
(或toString
)问题
您也可以通过初始化[]作为初始累加器来创建数组
var fruits = ['apple', 'orange', 'grape', 'apple'].reduce((countFruits,currentFruit)=>{
if(typeof countFruits[currentFruit]!=="undefined"){
countFruits[currentFruit] = countFruits[currentFruit]+1
return countFruits
}
countFruits[currentFruit] = 1
return countFruits
},[])
console.log(fruits)
有趣的问题。实际上,不是盲目的投票,而是尝试解决OP问题。如果他尝试了什么,它是不是很重要?我不知道为什么这个问题被否决了。看来,数组不能支持与C++中的map一样的用法,因为属性。@ dfsq我同意,但是,更容易理解实际的问题。lem提供了一些代码。@Pinal,我已经编辑了我的问题并添加了代码。@Pinal。这个问题已经回答了。如果你有更好的答案,希望能看到你的答案。如果你记录了结果的构造函数属性,你会发现一个奇怪的“1”添加到数组的构造函数中。这正是关键所在。我尝试过使用数组。你知道javascript是否有map吗?@Booster因为+“constructor”
是NaN,所以(+“constructor”| 0)
是0
@Booster别担心,你有3个支持者:+3/-8
:D@Booster我同意你的看法(顺便说一句,答案很有趣),这就是我投票的原因。下次请注意发布准备充分且详细的问题:)
function count(arr){
return arr.reduce(function(m,e){
m[e] = (+m[e]||0)+1; return m
},{});
}
var arr = ['apple', 'orange', 'grape', 'apple'];
var initialValue = {};
var result = arr.reduce(function(accumulator, curr, idx, arr) {
if (Object.hasOwnProperty.call(accumulator, curr)) { // does current exist as key on initialValue object?
accumulator[curr]++;
} else { // no key for current on initialValue object
accumulator[curr] = 1;
}
return accumulator;
}, initialValue);
console.log(result);
var fruits = ['apple', 'orange', 'grape', 'apple'].reduce((countFruits,currentFruit)=>{
if(typeof countFruits[currentFruit]!=="undefined"){
countFruits[currentFruit] = countFruits[currentFruit]+1
return countFruits
}
countFruits[currentFruit] = 1
return countFruits
},[])
console.log(fruits)