有时候我们会看到使用reduce而没有提供initialValue的代码。例如:
const array = [1, 2, 3];
array.reduce((re, v) => re + v);
根据mdn ↗的说法,这是有效的,而且看起来更简单。但这是一个好的实践吗?
没有initialValue带来的缺点:
在现实世界中,array可能是[]。在这种情况下:
const array = [];
array.reduce((re, v) => re + v);
你会在生产环境中遇到错误!
Uncaught TypeError: Reduce of empty array with no initial value
而且,想象一下如果你在工作中遇到这样的代码,你会一头雾水,不知道这个reduce做什么。
- 连接字符串
- 或者累加求和
- 或者其他情况?
在没有阅读上下文的情况下,你永远不会知道。
正如你所看到的,这些都是没有initialValue带来的最明显的缺点:
- 潜在的错误
- 不清晰的语义
使用initialValue带来的好处:
相反,如果使用带有initialValue的reduce。例如,在上面的例子中,我们可以这样写:
const array = [];
array.reduce((re, v) => re + v, 0);
- 我们将不会遇到错误!
- 很明显,
reduce用于进行累加求和的工作。
更加安全和清晰!