2015-08-08 7 views
5

La documentazione di Lodash dice che è supports lazy evaluation. Dai miei test, la catena sottostante viene valutata 100 volte anziché 10. Sto usando la versione 3.10.1.Lazy Evaluation non funziona in Lodash

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

Si può vedere che il risultato della stampa alla console 100 volte all'interno map, piuttosto che le 10 volte mi sarei aspettato. Controlla qui il problema: https://jsfiddle.net/07utwk6y/

Cosa sto facendo male? Come posso fare questo valutare pigramente?

Aggiornamento: Questa sembra essere una regressione in Lodash. Ho provato come funziona tra le versioni e sono imbattuto i seguenti risultati:

Versione 2.4.2: 100 volte https://jsfiddle.net/4Lq7z5xL/

Versione 3.0.0: 10 volte https://jsfiddle.net/fd6g6un5/

Versione 3.9.0 10 volte https://jsfiddle.net/ju8rppee/

Versione 3.10.0: 100 volte https://jsfiddle.net/x1g13oo8/

risposta

9

Questo è il comportamento previsto. Lodash eseguirà questa ottimizzazione solo su array con 200 o più elementi. Aumentare l'intervallo a 200 nella prima riga per vedere questo funziona.

+0

Sembra che il limite sia stato rimosso: https://github.com/lodash/lodash/commit/9d3047001d38a03f84c9afb86b5272d8c9533e5e –