根据减少的文件。
这是任务:
var inputWords = ['Apple', 'Banana', 'Apple', 'Durian', 'Durian', 'Durian']
console.log(countWords(inputWords))
// =>
// {
// Apple: 2,
// Banana: 1,
// Durian: 3
// }
这是解决方案:
function countWords(inputWords){
return inputWords.reduce(function(wordCount, currentValue){
if (!wordCount[currentValue]){
wordCount[currentValue] = 1;
} else {
wordCount[currentValue] = wordCount[currentValue] + 1;
}
return wordCount;
},{});
}
module.exports = countWords;
数组中的每个索引不是一个“字符串”吗?如何创建对象?我知道如何实现迭代器,但是有人可以解释发生了什么吗?
最佳答案
该函数的每次调用都会传递最后的结果wordCount
和数组的当前元素。 reduce的第二个参数传递wordCount
的初始值,在这种情况下,它是一个空的对象常量。
Reduce将为每个元素调用函数。每次调用wordCount
都会更新并返回,并在下一次调用时作为wordCount
传递。在函数中更新wordCount
不会在下次调用时影响wordCount
,返回的内容将是在下次调用时设置为wordCount
的内容。
每次通过时的外观如下(将值和变量从示例缩短为适合):
index | curVal | wordCount | (returned)
----------------------------------------------------------------------------
0 | 'App' | { } | {'App':1}
1 | 'Ban' | { 'App': 1 } | {'App':1,'Ban':1}
2 | 'App' | { 'App': 1, 'Ban': 1 } | {'App':2,'Ban':1}
3 | 'Dur' | { 'App': 2, 'Ban': 1 } | {'App':2,'Ban':1,'Dur':1 }
4 | 'Dur' | { 'App': 2, 'Ban': 1, 'Dur': 1 } | {'App':2,'Ban':1,'Dur':2 }
5 | 'Dur' | { 'App': 2, 'Ban': 1, 'Dur': 2 } | {'App':2,'Ban':1,'Dur':3 }
返回的值为
{ 'Apple': 2, 'Banana': 1, 'Durian': 3 }
关于javascript - 有人可以解释reduce方法如何在功能JavaScript挑战中发挥作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40116108/