2015-08-08 15 views
5

Tài liệu về Lodash nói rằng nó supports lazy evaluation. Từ thử nghiệm của tôi, chuỗi dưới đây đang được đánh giá 100 lần thay vì 10. Tôi đang sử dụng phiên bản 3.10.1.Đánh Giá Lười Biếng Không Hoạt Động Trong Lodash

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

Bạn có thể thấy rằng chúng tôi in bảng điều khiển 100 lần bên trong map, thay vì 10 lần tôi mong đợi. Hãy xem sự cố tại đây: https://jsfiddle.net/07utwk6y/

Tôi đang làm gì sai? Làm thế nào tôi có thể làm cho điều này đánh giá uể oải?

Cập nhật: Điều này dường như là hồi quy trong Lodash. Tôi đã thử nghiệm cách làm việc này trên các phiên bản và đã xem qua kết quả như sau:

Version 2.4.2: 100 lần https://jsfiddle.net/4Lq7z5xL/

Version 3.0.0: 10 lần https://jsfiddle.net/fd6g6un5/

Phiên bản 3.9.0 10 lần https://jsfiddle.net/ju8rppee/

Phiên bản 3.10.0: 100 lần https://jsfiddle.net/x1g13oo8/

Trả lời

9

Đây là hành vi được mong đợi. Lodash sẽ chỉ thực hiện tối ưu hóa này trên các mảng có từ 200 mục trở lên. Tăng phạm vi lên 200 trong dòng đầu tiên để xem hoạt động này.

+0

Có vẻ như giới hạn đã bị xóa: https://github.com/lodash/lodash/commit/9d3047001d38a03f84c9afb86b5272d8c9533e5e –

Các vấn đề liên quan