Hầu hết các trường hợp sử dụng của phương thức reduce() có thể được viết lại dễ dàng bằng vòng lặp for. Và thử nghiệm trên JSPerf cho thấy rằng giảm() thường chậm hơn 60% -75%, tùy thuộc vào các hoạt động được thực hiện bên trong mỗi lần lặp.Có lợi ích thực sự nào khi sử dụng phương thức javascript Array reduce() không?
Có lý do thực sự nào để sử dụng hàm reduce() sau đó, ngoài việc có thể viết mã theo 'kiểu chức năng'? Nếu bạn có thể đạt được hiệu suất 60% bằng cách viết thêm một chút mã, tại sao bạn lại sử dụng reduce()?
EDIT: Trên thực tế, các phương thức chức năng khác như forEach() và map() đều hiển thị hiệu suất tương tự, chậm hơn ít nhất 60% so với đơn giản cho các vòng lặp.
Dưới đây là một liên kết đến bài kiểm tra JSPerf (với chức năng cuộc gọi): forloop vs forEach
Tôi không đồng ý với bạn về những gì cấu thành so sánh hiệu suất hợp lệ. _first_ là so sánh hợp lệ, bởi vì chắc chắn (ví dụ của bạn) câu hỏi là "Phương pháp nào là nhanh nhất khi thêm một phần tử vào mỗi mảng?", Không phải "Phương thức nào là nhanh nhất nhưng bất kỳ phương thức nào không sử dụng lệnh gọi hàm đều bị loại từ mục nhập ". Tôi sẽ đồng ý rằng nếu bạn cho rằng bạn muốn có một hàm cho mục đích scoping/closure thì bạn cũng có thể sử dụng '.reduce()' hoặc '.forEach()' hoặc bất cứ thứ gì. – nnnnnn
Câu hỏi này là chính xác về cú pháp, vì vậy nó là một so sánh hiệu suất hợp lệ. Có lẽ tôi nên thuật lại câu hỏi trong một kịch bản mà bạn muốn siết chặt mọi hiệu suất có thể. Trong trường hợp đó tôi không thể tìm ra lý do chính đáng để không sử dụng đồng bằng cho vòng lặp. Bạn có thể cung cấp một ví dụ cụ thể trong đó phạm vi là hoàn toàn cần thiết? –
@EvanYou: '[1,2,3].forEach (function (x) {setTimeout (function() {alert (x)}, 1000)}) '(cảnh báo 1,2,3) so với' for (var i = 0; i <4; i ++) {setTimeout (function() {alert (i)}, 1000)} '(cảnh báo 4,4,4) – ninjagecko