2013-02-20 15 views
6

Tôi vừa mới bắt đầu khám phá thư viện JavaScript Underscore sâu hơn và chỉ muốn làm rõ những gì tôi nghĩ _.reduce() (còn được gọi là injectfoldl) là đúng. Câu hỏi của tôi là: bên dưới có đúng không?Làm sáng tỏ _.reduce làm rõ?

Khi _.reduce([1, 2, 3, 4, 5], function(memo, num) { return memo + num; }, 5); được gọi, sau đây sẽ xảy ra:

  • memo bắt đầu từ 5
  • memo + list[0] = memo = 6
  • memo + list[1] = memo = 8
  • memo + list[2] = memo = 11
  • memo + list[3] = memo = 15
  • memo + list[4] = memo = 20

Và đó là lý do tại sao chức năng ran trả 20. Có đúng không? Và do đó, _.reduceRight() ngược lại và bắt đầu từ memo + list[ /* last element in array */ ]?

Cảm ơn.

Trân trọng.

Trả lời

11

Vâng, đúng vậy. Đối số đầu tiên cho cuộc gọi lại reduce đại diện cho giá trị được trả lại từ lần lặp cuối cùng (hoặc hạt giống khi trong lần lặp đầu tiên).

Đối số thứ hai cho hàm gọi lại là giá trị của phép lặp hiện tại của Mảng.

Như vậy, đối số đầu tiên là một bộ tích lũy của bất kỳ kết quả nào bạn đang cố gắng tiếp cận. Giá trị cuối cùng được trả về từ hàm _.reduce khi tất cả các lần lặp lại hoàn tất.

+0

Cảm ơn, rất nhiều; tất cả những gì tôi muốn. Chúc một ngày tốt lành. – raf

+0

Bạn được chào đón. –