如果我不打算返回任何内容,我应该使用像map和filter这样的数组方法吗?

Jus*_*tin 1 javascript arrays ecmascript-6 eslint

去年,我更频繁地使用数组方法,如映射过滤器,而不是数组上的标准 for 循环。它感觉更容易阅读和编写,并且可以完成我最有可能要做的所有事情,例如创建局部变量。

但很多时候我不会返回任何东西。不过埃斯林特不太喜欢我。据他们说,他们说你总是需要返回,否则“可能是一个错误” https://eslint.org/docs/rules/array-callback-return

为什么?只是好的做法吗?无返回数组方法有哪些缺点?

考虑这个问题有一段时间了。任何见解或想法都会很棒。

jfr*_*d00 5

如果我不打算返回任何内容,我应该使用像map和filter这样的数组方法吗?

不,你不应该。

为什么?只是好的做法吗?

是的。对于您正在执行的迭代类型,使用适当的迭代方法是一个很好的做法。有多种方法可以出于某种原因进行迭代。选择适当的机制。

无返回数组方法有哪些缺点?

使用回调.map().filter()实际上不返回任何内容有以下缺点:

  1. 您的代码具有误导性。.map()and 的要点.filter()是迭代数组并生成一个新数组。当开发人员阅读某些代码并看到.map().filter()正在使用时,他们期望应该有一个返回的数组。当他们没有看到这样做时,他们会感到困惑,最初会觉得他们不理解代码。如果我对这样的代码进行代码审查,我不会批准这样的代码。

  2. 您的代码不必要地创建了未使用的对象。 这只是浪费而且不是一个好的做法。相反,请使用不会生成输出数组的迭代方法,例如for/of、常规for循环 或.forEach()

  3. 你的代码不会起毛。 Linters 提供对事物的反对是有原因的。正如 linter 所说,使用.map().filter()不从回调返回任何内容“可能是一个编程错误”,因为这不是这些函数的设计使用方式,并且当您不想要返回的数组时,有适当的替代方案。

因此,如果您只是尝试进行迭代而不创建任何结果数组,请使用for/of.forEach()或某些其他迭代方案,该方案不是专门为创建您不想要的输出数组而设计的。