JS 数组 reduce 的一个陷阱

246 阅读1分钟

有时候我们会看到使用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带来的好处:

相反,如果使用带有initialValuereduce。例如,在上面的例子中,我们可以这样写:

const array = [];
array.reduce((re, v) => re + v, 0);
  • 我们将不会遇到错误!
  • 很明显,reduce用于进行累加求和的工作。

更加安全清晰

来源 ↗

参考资料