我是否应该使用地图和过滤器等数组方法,如果我不返回任何内容?

时间:2018-05-02 17:05:42

标签: javascript arrays ecmascript-6 eslint

在过去的一年里,我经常使用数组方法,如 map filter ,而不是数组上的循环标准。阅读和写作感觉更简单,并且我最有可能做的所有事情都是如此,比如创建一个局部变量。

有时我不会回报任何东西。虽然Eslint并不喜欢我。据他们说,他们说你总是需要回报,否则"可能是一个错误" https://eslint.org/docs/rules/array-callback-return

为什么?这只是好习惯吗?无回归数组方法的缺点是什么?

一直想着这个。任何见解或想法都会很棒。

3 个答案:

答案 0 :(得分:4)

  

我是否应该使用map和filter等数组方法,如果我不打算返回任何内容?

不,你不应该。

  

为什么呢?这只是好习惯吗?

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

  

无回归数组方法的缺点是什么?

使用.map().filter()而不实际从回调中返回任何内容会产生以下缺点:

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

  2. 您的代码不必要地创建了未使用的对象。这只是浪费。而且,任何浪费的做法,以及使用.forEach()for/of进行简单且非浪费的方式都不是一种好的做法。

  3. 您的代码不会丢失。 Linters因某种原因提出异议。使用.map().filter()而不返回回调中的任何内容,就像linter所说的那样,“可能是一个编程错误”,因为这不是那些函数的设计使用方式,并且有适当的替代方案你不想要一个返回的数组。

  4. 因此,如果您只是尝试在不创建任何结果数组的情况下进行迭代,请使用for/of.forEach()或其他一些非专门用于创建输出数组的迭代方案你不想要。

答案 1 :(得分:0)

首先,您需要了解Map / Filter和forEach之间的区别。

恢复.. forEach主要用于需要使用/作为过程迭代数组时。 check

Map和Filter与每次迭代时应用的回调函数相关。 这些的返回语句将被评估,而不是函数通过最后的Map / Filter函数。需要它的原因。虽然JS允许“无论什么”当然,你能够定义那个功能,我们的理解是“过滤器”。

对于过滤器,您可以看到“真实”和“假”,就像“数据”将被过滤一样。

答案 2 :(得分:-1)

基本上你可以使用mapforEach / for进行循环,区别如下:

foreach:这会迭代一个列表并对每个列表成员应用一些带副作用的操作,这意味着您正在转换正在循环的当前阵列....或者@ TiagoCoelho,你根本不要搞乱这个阵列,只是循环思考它。

map:这会迭代一个列表,转换该列表的每个成员,并返回另一个与转换成员相同大小的列表,这意味着您将获得一个全新的ARRAY修改过的项目,你也将在内存中拥有旧数组。

所以基本上它取决于你想要对数组内部的数据做什么。

参考

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

的示例:

var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4];
//multiply each item for 2, it will stay on the same array.
a.forEach(i => {
  i = i * 2
})


//multiply the items of B for 2 but it will return a new array
var c = b.map(i => {
  return i * 2
})

console.log(a); //modified reference
console.log(b); //stays the same
console.log(c); //new array