2015-08-08 18 views
5

Die Lodash Dokumentation sagt, dass es supports lazy evaluation. Aus meinen Tests wird die untere Kette 100 mal ausgewertet anstatt 10. Ich benutze Version 3.10.1.Lazy Evaluation funktioniert nicht in Lodash

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

Sie können sehen, dass wir auf der Konsole 100-mal innerhalb map, anstatt die 10-mal gedruckt ich erwartet hätte. Überprüfen Sie das Problem hier: https://jsfiddle.net/07utwk6y/

Was mache ich falsch? Wie kann ich dies träge bewerten lassen?

Update: Dies scheint eine Regression in Lodash zu sein. Getestet habe ich, wie diese über Versionen funktioniert und kam über die folgenden Ergebnisse:

Version 2.4.2: 100 mal https://jsfiddle.net/4Lq7z5xL/

Version 3.0.0: 10 mal https://jsfiddle.net/fd6g6un5/

Version 3.9.0 10 mal https://jsfiddle.net/ju8rppee/

Version 3.10.0: 100 mal https://jsfiddle.net/x1g13oo8/

Antwort

9

Dieses Verhalten erwartet wird. Lodash führt diese Optimierung nur für Arrays mit 200 oder mehr Elementen durch. Erhöhen Sie den Bereich in der ersten Zeile auf 200, um zu sehen, ob dies funktioniert.

+0

Sieht aus wie das Limit wurde entfernt: https://github.com/lodash/lodash/commit/9d3047001d38a03f84c9afb86b5272d8c9533e5e –