Lodash文档说它supports lazy evaluation。根据我的测试,下面的链被评估100次而不是10次。我使用的是版本3.10.1。
_(_.range(100))
.map(function(x) {console.log(1); return x; })
.take(10)
.value()
您可以看到我们在map
内打印到控制台100次,而不是我预期的10次。在这里查看问题:https://jsfiddle.net/07utwk6y/
我做错了什么?如何懒惰地评估这个?
更新:这似乎是Lodash的回归。我测试了它在不同版本中的工作原理,并得出以下结果:
版本2.4.2:100次https://jsfiddle.net/4Lq7z5xL/
3.0.0版:10次https://jsfiddle.net/fd6g6un5/
版本3.9.0 10次https://jsfiddle.net/ju8rppee/
版本3.10.0:100次https://jsfiddle.net/x1g13oo8/
答案 0 :(得分:10)
这是预期的行为。 Lodash仅对具有200个或更多项目的阵列执行此优化。在第一行中将范围增加到200以查看此工作。