面对我不明白什么时候什么时候应用这个方法的事实map,forEach我也经常遇到reduce,但不清楚他们为什么选择它而不是,例如,同一个map。
代码应该在什么map时候使用reduce,什么时候使用forEach?
他们的主要区别是什么?
面对我不明白什么时候什么时候应用这个方法的事实map,forEach我也经常遇到reduce,但不清楚他们为什么选择它而不是,例如,同一个map。
代码应该在什么map时候使用reduce,什么时候使用forEach?
他们的主要区别是什么?
map、forEach和reduce方法确实有很多共同点,使用什么以及何时使用取决于您最终想要得到什么样的结果。
假设我们有一个数组:
如果我们只需要对数组的每个元素执行某个动作,那么forEach 方法就适合这里:
如果我们想转换我们的数组并将结果存储在一个变量中,那么map 方法将比 forEach 更合适,因为第一个方法会立即返回一个新数组。
当我们需要在 HTML 标签中“包装”每个国家/地区名称时,让我们看看 forEach 与 map 的区别:
reduce 方法与 map 的不同之处在于它返回最终的“值”。
假设我们要计算总人口规模:
这是一个相当简单的例子,但是“最终值”不仅可以是一个数字,还可以是一个对象或一个数组,这使得 reduce 方法成为一个真正强大的转换工具。
了解所有三种方法都只是看起来比常规循环更漂亮的内联循环是很有用的。如果您已经擅长使用循环,您只需要知道这些方法的作用,以便逐渐过渡到它们。
► forEach(正则枚举)
► map - 创建一个新数组,为原始数组的每个元素依次调用传递的函数。将此函数的调用结果添加到创建的数组中。
► reduce - 可用于除主要参数外,还需要一个额外变量的所有情况,该变量将在枚举过程中存储一些内容。
并且“内部”发生了这样的事情:
简而言之:
当您需要更改当前数组或从其中一个一个地使用数据而不返回新值时,最好使用
forEach()(或for-of循环)。示例:将数组的所有元素一一打印到控制台。当您需要创建并返回一个具有相同数量元素但已更改它们的新数组时,最好使用
map(). 示例:从字符串数组创建一个新的数字数组。当您需要创建并返回完全不同的值(原始值或对象)时,在创建过程中迭代数组的元素时,最好使用
reduce(). 示例:返回数组中所有数值元素的总和。FOREACH - 当你有“面条代码”时,当循环体很简单时 - 2-5行。这个循环很容易阅读。
而如果代码被分割成回调,那么body中的一切都是复杂的,你可以把它分成一个函数或者已经有一个函数——然后是map,reduce。
MAP - 对每个元素应用一个函数。输出是一个相同长度的数组。
REDUCE - 成对地从最后一次迭代中获取结果,并从数组中获取一个新元素。输出是一个变量。