惰性求值在 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 以查看此工作。
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 以查看此工作。