根据减少的文件。



这是任务:


 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/

10-12 02:23