2015-08-08 9 views
5

में काम नहीं कर रहा है लोडाश दस्तावेज कहता है कि यह supports lazy evaluation है। मेरे परीक्षण से, नीचे दी गई श्रृंखला का मूल्यांकन 10 से 10 गुना किया जा रहा है। मैं संस्करण 3.10.1 का उपयोग कर रहा हूं।आलसी मूल्यांकन लोडैश

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

आप देख सकते हैं कि हम कंसोल के लिए map अंदर 100 बार प्रिंट, बल्कि 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

यह व्यवहार की उम्मीद है। लोडाश केवल 200 या अधिक वस्तुओं के साथ सरणी पर यह अनुकूलन करेगा। इस काम को देखने के लिए पहली पंक्ति में 200 तक सीमा बढ़ाएं।

+0

ऐसा लगता है कि सीमा हटा दी गई थी: https://github.com/lodash/lodash/commit/9d3047001d38a03f84c9afb86b5272d8c9533e5e –

संबंधित मुद्दे