Tổng số javascript Codewars tích cực
Đơn giản, đó là vì hàm
Nhưng, tại sao nó không hoạt động khi bạn cố đặt logic tương tự với dòng mã tiếp theo?
Sự cố xảy ra khi giá trị nhỏ nhất của mảng nằm ở chỉ số lớn hơn 2 chẳng hạn
khi chúng ta cố gắng thực thi mã trên mảng này, hãy thực hiện từng bước một để biết sai ở đâu
Khi thực thi mã trước đó, điều đầu tiên mà hàm sẽ thực hiện là lọc. Nó sẽ lặp qua các phần tử của mảng
Trước khi tiếp tục lặp lại
Phần kết luậnNhư bạn có thể nhận thấy, giá trị 1 đã được kiểm tra hai lần và giá trị 2, hoàn toàn không được kiểm tra, đó là do sự thay đổi đột ngột về thứ tự của mảng trong quá trình lặp lại hiện đang diễn ra của phương thức filter . Điều này đã dẫn đến việc đặt giá trị của 2 vào một vị trí đã được kiểm tra và giá trị của 1 vào một vị trí chưa được kiểm traLưu ý Đây không phải là một giải pháp tối ưu cho một vấn đề như vậy, nó thực hiện quá nhiều công việc để có được giải pháp, (lọc, sắp xếp, rút gọn), đây là những thao tác tốn kém để thực hiện. Một giải pháp tốt hơn sẽ giống như thế này, bao gồm một vòng lặp duy nhất thông qua các phần tử của mảng 6 Là thành viên beta của CodeWars, tôi vừa hoàn thành khóa đào tạo bài kata “Tổng dương”. Hãy bắt đầu tham gia cùng tôi và bắt đầu đào tạo Nếu bạn đã là thành viên, hãy nhấp vào đây để đào tạo về “Tổng tích cực” Một dãy số được truyền vào một hàm. Sự trở lại là tổng của tất cả các số dương. Nếu không có gì để thêm, tổng mặc định được đặt thành 0 ( 0 ). Ví dụ [1, -4, 7, 12] => 1 + 7 + 12 = 20 Chia vấn đề thành các bước nhỏ, dễ quản lý. Tại sao? . Làm từng bước nhỏ, trước khi bạn biết điều đó, nhiệm vụ lớn đã hoàn thành
Cắt bỏ sự lộn xộn. Xác định những gì thực sự cần thiết để giải quyết vấn đề
Các nhà phát triển yêu thích mã DRY. DRY có nghĩa là Đừng lặp lại chính mình. Có bước nào đang được lặp lại không?
TẤT CẢ CÁC BÀI KIỂM TRA ĐÃ THÔNG QUA. CÓ Vì vậy, bất cứ khi nào tôi hoàn thành một thử thách, tôi đều xem qua các giải pháp của người khác để tìm bất cứ điều gì tôi có thể cải thiện. Lần này, tôi biết được có 2 hàm hoàn thành công việc, hàm JavaScript filter() & reduce(). Giải pháp của tôi có thể được viết lại hoàn toàn KHÔNG CÓ vòng lặp. Tôi thừa nhận, tôi thích phiên bản tái cấu trúc hơn, mặc dù cả hai đều tuyệt vời và hoàn thành công việc Giải pháp tái cấu trúc
lọc()Bộ lọc JavaScript() trả về một mảng chứa tất cả các phần tử mảng vượt qua bài kiểm tra được đưa ra dưới dạng một hàm. Một số điều quan trọng cần lưu ý về filter()
Vì vậy, bước này là nơi tất cả các số nguyên âm bị loại bỏ và một mảng chỉ các số nguyên dương (nếu có) được trả về Để biết thêm thông tin về hàm JavaScript filter(), hãy xem tại đây trên W3Schools giảm bớt()Hàm JavaScript reduce() giảm một mảng thành một giá trị. Nó đi qua từng phần tử của mảng được đính kèm từ trái sang phải và thực thi hàm được cung cấp trên mỗi. Nó trả về một bộ tích lũy chỉ ưa thích cho một kết quả hoặc tổng số. Một điều quan trọng cần lưu ý về reduce()
Đây là nơi các phần tử dương trong mảng được trả về bởi hàm filter() được cộng lại với nhau |