在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
)
答案 0 :(得分:6)
在性能方面,这两个函数之间有什么区别?
这不太重要。如果您担心这件事,请创建一个代表您真实代码的测试并尝试它(可能在http://jsperf.com上)。但除非你处理成千上万的条目,或者重复你的循环数十万次,否则它们之间任何差异的真实影响可能都不算什么。 (哎呀,使用现代JavaScript引擎,成千上万的人可能甚至不足以看到你关心的差异。)
但推测:由于map
必须创建并填充一个数组以用作返回值(您将忽略它),而forEach
没有,因此可以理所当然<{1}} 会非常轻微地慢。
但是:这里更大的论点是使用适合工作的工具:如果您不需要返回值,请不要使用{{1} }。其目的是通过将原始对象的值映射到新对象来创建结果。你不希望这样,所以map
是一个奇怪的选择,可能会使那些对代码进行维护的人绊倒。