Lodash中_.map和_.forEach的性能差异是什么?

YoB*_*Bre -3 javascript coffeescript angularjs lodash

在lodash中滚动_.map和_.forEach列表的最佳方法是什么?我不需要返回值,但我只在循环中做一些事情.

在性能方面,这两个功能有什么区别?

a = []
b = []
list = response._source.carico_scarico
if angular.isDefined(list)
  _.forEach(list, (cs) ->
    if cs.qta >= 0 then a.push cs
    if cs.qta < 0 then b.push cs
  )
Run Code Online (Sandbox Code Playgroud)

要么

a = []
b = []
list = response._source.carico_scarico
if angular.isDefined(list)
  _.map(list, (cs) ->
    if cs.qta >= 0 then a.push cs
    if cs.qta < 0 then b.push cs
  )
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

在性能方面,这两个功能有什么区别?

这不太重要.如果您担心这件事,请创建一个代表您真实代码的测试并尝试它(可能在http://jsperf.com上).但除非你处理成千上万的条目,或者重复你的循环数十万次,否则它们之间任何差异的真实影响可能都不算什么.(哎呀,有了现代的JavaScript引擎,成千上万的人可能甚至不足以看到你所关心的差异.)

但推测:由于map必须创建并填充一个数组以用作返回值(您将忽略它),而forEach不是,因此map可以非常轻微地进行推理.


但是:这里更大的论点是使用正确的工具:如果你不需要返回值,请不要使用map.其目的是通过将原始对象的值映射到新对象来创建结果.你不希望这样,所以这map是一个奇怪的选择,可能会让人们对代码进行线下维护.