使用Array.reduce时修改累加器是否不推荐?附两类代码示例
关于Array.reduce使用的两个问题解答
1. 统计元素出现次数的写法是否不推荐?
你写的这个统计次数的函数完全可以正常工作,修改累加器的操作其实没有问题——因为累加器是数字(基本类型),accumulator++本质是在函数内部生成一个新数值后返回,并没有破坏reduce的工作逻辑。
不过从函数式编程的风格角度,更推荐用表达式直接返回结果,避免对参数做赋值操作,写法会更简洁:
function countOccurrencesReduceOwn(array, searchElement) { return array.reduce((accumulator, currentValue) => currentValue === searchElement ? accumulator + 1 : accumulator, 0); }
但原写法绝对算不上“不推荐”,只是风格差异,功能完全没问题。
2. 获取最大值的函数为什么无法运行?
这个函数不工作的问题和修改累加器无关,纯粹是因为你最后没有返回结果!函数里定义了largest变量,但结尾没写return largest;,调用时会默认返回undefined。
修正后的代码如下:
function getMaxReduceOwn(array) { if(array.length <= 0) { return undefined; } const largest = array.reduce((largest, currentValue) => { if(currentValue > largest) { largest = currentValue; } return largest; }, array[0]); return largest; // 加上这行就正常了 }
同样,这里的largest = currentValue操作也没问题,也可以改成更简洁的表达式写法:
function getMaxReduceOwn(array) { if(array.length <= 0) { return undefined; } return array.reduce((largest, currentValue) => currentValue > largest ? currentValue : largest, array[0]); }
内容的提问来源于stack exchange,提问作者Suvi
相关产品推荐
相关产品推荐

