Trong bài đăng trên blog này, tôi sẽ giải thích cách giải quyết tác vụ, cũng như cách lặp lại một mức độ phức tạp hơn, bằng cách tạo một hàm nhận các tham số tùy chỉnh cho cả chuỗi và số nguyên. Điều này xuất hiện gần đây như một thử thách chiến tranh mật mã và sau khi đập đầu vào tường gạch một lúc, tôi đã tìm ra giải pháp bên dưới
Giống như tất cả các vấn đề mã hóa, cách tốt nhất để tiếp cận nhiệm vụ này là chia nó thành các phần nhỏ hơn
Bước 1. Tạo mảng số của chúng tôi
Bước đầu tiên của chúng tôi là tạo một chức năng trống, chức năng này cuối cùng sẽ chạy tất cả mã của chúng tôi
Tiếp theo, chúng ta khai báo một mảng trống trong hàm
Cho đến nay, rất đơn giản
Bước tiếp theo của chúng tôi giới thiệu phần logic đầu tiên của chúng tôi. Chúng tôi muốn tạo một bộ đếm chạy từ 1 đến 100 và đặt 'cái gì đó' vào mảng cho mỗi số đó. Như trong phần phác thảo, chúng tôi muốn đây là số nguyên, “fizzbuzz”, “fizz” hoặc “buzz” tùy thuộc vào số đó là gì. Chúng tôi làm điều này với một vòng lặp for
Vòng lặp này đặt một biến 'i', mà chúng ta sẽ sử dụng làm bộ đếm của mình. Chúng tôi đặt i thành 1, vì chúng tôi muốn chạy từ 1 đến 100, thay vì 0 đến 100. Sau đó, chúng tôi đặt mệnh đề kết thúc của mình, bằng cách nói rằng miễn là độ dài của mảng, 'arr' nhỏ hơn 100, hãy chạy mã trong vòng lặp. Cuối cùng, chúng tôi tăng biến i của mình lên 1 mỗi lần chúng tôi chạy mã
Nếu chúng ta chỉ muốn trả về số 1 đến 100, chúng ta có thể làm như vậy ở giai đoạn này bằng cách gọi phương thức mảng 'push' trên mảng 'arr', như thế này
Đây là kết thúc của bước đầu tiên của chúng tôi
Bước hai. Thay thế số của chúng tôi bằng “fizz” và “buzz”
Để thay thế các số của chúng tôi bằng 'Fizz' và "Buzz", chúng tôi cần thực hiện thêm một bước và thiết lập câu lệnh if/else
Chúng tôi sử dụng toán tử modulo ở đây để tìm ra con đường nào sẽ đi. Modulo trả về phần còn lại của một số nguyên, vì vậy trong tiếng Anh đơn giản, những gì chúng tôi đang nói ở đây là
Nếu số [i] chia cho 3 không có số dư, hãy đẩy chuỗi 'fizz' đến vị trí chỉ mục tương ứng trong mảng
Ngược lại, nếu số [i] chia cho 5 không có số dư thì đẩy chuỗi ‘buzz’ đến vị trí chỉ số tương ứng trong mảng
Cuối cùng, nếu cả hai điều kiện này đều không đúng, chỉ cần đẩy số [i] vào mảng
Chúng ta đã đi gần hết, nhưng chúng ta muốn in “FizzBuzz” nếu số đó chia hết cho cả 3 VÀ 5. May mắn thay, bước bổ sung này rất dễ dàng
Tất cả những gì chúng tôi làm là thêm một điều kiện bổ sung vào đầu vòng lặp. Điều này nói
“Nếu số [i] chia hết cho 3 VÀ số [i] chia hết cho 5, đẩy chuỗi “FizzBuzz” vào mảng”
Nếu điều kiện này không đúng, thì chúng ta sẽ xử lý phần còn lại của câu lệnh if/else như bình thường
mã cuối cùng của chúng tôi trông như thế này
Lưu ý rằng chúng tôi trả lại mảng của mình là điều cuối cùng chúng tôi làm, để chúng tôi thực sự trả về nội dung
và nếu chúng tôi chạy nó, đây là kết quả chúng tôi nhận được
Bước 3. thêm thông số tùy chỉnh
Chúng tôi có mã cơ bản đang hoạt động, nhưng chúng tôi muốn thiết lập chức năng của mình để nhận và trả về các tham số tùy chỉnh
Điều đầu tiên chúng ta sẽ làm là mở rộng hàm của mình với bốn đối số. Chúng tôi sẽ cho phép những giá trị này được đặt tại thời điểm hàm được gọi, nhưng cũng đặt các giá trị mặc định
Đây là một cách để đặt các đối số tùy chọn trong một hàm. Chúng tôi đã áp dụng các giá trị mặc định của mình, nhưng chúng có thể bị ghi đè khi hàm được gọi
Đối với bước cuối cùng, tất cả những gì chúng ta muốn làm là đảm bảo rằng các giá trị trả về được đặt khi hàm được gọi. Để làm điều này, chúng tôi chỉ muốn đảm bảo rằng thay vì đẩy một chuỗi đã đặt vào mảng, như chúng tôi đã làm trong ví dụ trước, chúng tôi đang đẩy bất kỳ thứ gì có trong các đối số hàm của chúng tôi
Chúng tôi thay thế 3 và 5 được mã hóa cứng trong if/else bằng n1/n2, để lấy đầu vào tùy chỉnh [hoặc giá trị mặc định nếu giá trị này không được cung cấp] và chúng tôi thay thế các chuỗi “fizzbuzz” được mã hóa cứng bằng các đối số str1/str2
Đây là cách mã cuối cùng của chúng ta sẽ trông như thế nào
Bây giờ chúng ta có thể chạy mã với các đối số tùy chỉnh của mình, như thế này
Và đây là kết quả chúng ta nhận được, với log “hello” cho tất cả các số chia hết cho 2 và “helloworld” cho tất cả các số chia hết cho 2 và 10
Chúng ta cũng có thể gọi các số đơn từ mảng của mình như thế này
sẽ chỉ trả về bất cứ thứ gì ở chỉ mục 19, dẫn đến
Hy vọng rằng điều này hữu ích cho bất kỳ ai đang tìm cách giải quyết một thử thách FizzBuzz tương tự. Nếu bạn có bất kỳ câu hỏi nào [hoặc một giải pháp tốt hơn. ] Hãy cho tôi biết ở phần bình luận
Tôi từng là Chuyên viên phân tích dữ liệu tràn ngăn xếp, đang chuyển sang lĩnh vực phát triển và đang tích cực tìm kiếm vị trí nhà phát triển javascript cấp dưới ở London [Anh], vì vậy nếu bạn đang tuyển dụng và thích giao diện giải pháp của tôi, vui lòng gửi email cho tôi