2015-08-08 152 views
5

Lodash文檔說它supports lazy evaluation。從我的測試中,下面的鏈條被評估100次而不是10次。我使用的是3.10.1版本。懶惰評估不起作用在Lodash

_(_.range(100)) 
.map(function(x) {console.log(1); return x; }) 
.take(10) 
.value() 

你可以看到,我們打印到控制檯100次裏面map,而不是10倍,我本來期望。看看這裏的問題:https://jsfiddle.net/07utwk6y/

我在做什麼錯?我怎樣才能讓這種懶惰的評估?

更新:這似乎是在洛達什迴歸。我測試是如何工作的不同版本和整個以下結果出來:

版本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/

回答

9

這是預期的行爲。 Lodash只會對具有200個或更多物品的陣列執行此優化。在第一行中將範圍增加到200以查看此功能。

+0

看起來像限制被刪除:https://github.com/lodash/lodash/commit/9d3047001d38a03f84c9afb86b5272d8c9533e5e –