惰性求值在 Lodash 中不起作用

Lazy Evaluation Not Working In Lodash

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/

这是预期的行为。 Lodash 只会对包含 200 个或更多项的数组执行此优化。在第一行中将范围增加到 200 以查看此工作。