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

时间:2015-04-27 12:46:35

标签: javascript angularjs coffeescript 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
  )

或者

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
  )

1 个答案:

答案 0 :(得分:6)

  

在性能方面,这两个函数之间有什么区别?

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

但推测:由于map必须创建并填充一个数组以用作返回值(您将忽略它),而forEach没有,因此可以理所当然<{1}} 会非常轻微地慢。

但是:这里更大的论点是使用适合工作的工具:如果您不需要返回值,请不要使用{{1} }。其目的是通过将原始对象的值映射到新对象来创建结果。你不希望这样,所以map是一个奇怪的选择,可能会使那些对代码进行维护的人绊倒。