【问题标题】:What is the performance difference between _.map and _.forEach in Lodash?Lodash 中 _.map 和 _.forEach 的性能差异是什么?
【发布时间】:2015-07-05 22:25:55
【问题描述】:

在 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
  )

【问题讨论】:

  • 你应该自己计算性能。
  • “在性能方面” - 您需要自己客观地衡量这一点
  • 所以没有办法绝对知道一种方法是否比另一种更好?
  • 有一种方法可以绝对了解给定的用例:测量它。

标签: javascript angularjs coffeescript lodash


【解决方案1】:

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

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

但推测:由于map 必须创建并填充一个数组以用作返回值(您将忽略它),而forEach 没有,因此map非常非常轻微慢一点。


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多