Trong bài viết này, tôi sẽ giải thích cách giải quyết vấn đề “Xác nhận kết thúc” của freeCodeCamp.” thách đấu. Điều này liên quan đến việc kiểm tra xem một chuỗi có kết thúc bằng chuỗi ký tự cụ thể hay không.
Có hai cách tiếp cận tôi sẽ đề cập:
- sử dụng phương thức substr()
- sử dụng phương thức endWith()
Thử thách thuật toán Mô tả
Kiểm tra xem một chuỗi (đối số đầu tiên,
str
) kết thúc bằng chuỗi đích đã cho (đối số thứ hai,target
).Thách thức này có thể được giải quyết bằng
.endsWith()
phương pháp, được giới thiệu trong ES2015. Nhưng với mục đích của thử thách này, chúng tôi muốn bạn sử dụng một trong các phương thức chuỗi con JavaScript để thay thế.
function confirmEnding(string, target) {
return string;
}
confirmEnding("Bastian", "n");
Các trường hợp thử nghiệm được cung cấp
confirmEnding("Bastian", "n") should return true.
confirmEnding("Connor", "n") should return false.
confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") should return false.
largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) should return [9, 35, 97, 1000000].
confirmEnding("He has to give me a new name", "name")should return true.
confirmEnding("Open sesame", "same") should return true.
confirmEnding("Open sesame", "pen") should return false.
confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") should return false.
Do not use the built-in method .endsWith() to solve the challenge.
Cách tiếp cận số 1: Xác nhận kết thúc chuỗi bằng các hàm tích hợp — với substr()
Đối với giải pháp này, bạn sẽ sử dụng phương thức String.prototype.substr():
- Các
substr()
phương thức trả về các ký tự trong một chuỗi bắt đầu tại vị trí đã chỉ định thông qua số lượng ký tự đã chỉ định.
Tại sao bạn sử dụng string.substr(-target.length)
?
Nếu target.length là số âm, phương thức substr() sẽ bắt đầu đếm từ cuối chuỗi, đây là điều bạn muốn trong thử thách viết mã này.
Bạn không muốn sử dụng string.substr(-1)
để lấy phần tử cuối cùng của chuỗi, bởi vì nếu mục tiêu dài hơn một chữ cái:
confirmEnding("Open sesame", "same")
…mục tiêu sẽ không trở lại chút nào.
Nên ở đây string.substr(-target.length)
sẽ nhận được chỉ mục cuối cùng của chuỗi ‘Bastian’ là ‘n’.
Sau đó, bạn kiểm tra xem string.substr(-target.length)
bằng mục tiêu (đúng hoặc sai).
function confirmEnding(string, target) {
// Step 1. Use the substr method
if (string.substr(-target.length) === target) {
// What does "if (string.substr(-target.length) === target)" represents?
// The string is 'Bastian' and the target is 'n'
// target.length = 1 so -target.length = -1
// if ('Bastian'.substr(-1) === 'n')
// if ('n' === 'n')
// Step 2. Return a boolean (true or false)
return true;
} else {
return false;
}
}
confirmEnding('Bastian', 'n');
Không có ý kiến:
function confirmEnding(string, target) {
if (string.substr(-target.length) === target) {
return true;
} else {
return false;
}
}
confirmEnding('Bastian', 'n');
Bạn có thể sử dụng một toán tử bậc ba như một lối tắt cho câu lệnh if:
(string.substr(-target.length) === target) ? true : false;
Điều này có thể được đọc là:
if (string.substr(-target.length) === target) {
return true;
} else {
return false;
}
Sau đó, bạn trả về toán tử bậc ba trong hàm của mình:
function confirmEnding(string, target) {
return (string.substr(-target.length) === target) ? true : false;
}
confirmEnding('Bastian', 'n');
Bạn cũng có thể cấu trúc lại mã của mình để làm cho mã ngắn gọn hơn bằng cách trả về điều kiện:
function confirmEnding(string, target) {
return string.substr(-target.length) === target;
}
confirmEnding('Bastian', 'n');
Cách tiếp cận #2: Xác nhận kết thúc chuỗi bằng các hàm tích hợp — với endWith()
Đối với giải pháp này, bạn sẽ sử dụng phương thức String.prototype.endsWith():
- Các
endsWith()
phương thức xác định xem một chuỗi có kết thúc bằng các ký tự của một chuỗi khác hay không, trả vềtrue
hoặcfalse
khi thích hợp. Phương pháp này phân biệt chữ hoa chữ thường.
function confirmEnding(string, target) {
// We return the method with the target as a parameter
// The result will be a boolean (true/false)
return string.endsWith(target); // 'Bastian'.endsWith('n')
}
confirmEnding('Bastian', 'n');
Tôi hy vọng bạn tìm thấy điều này hữu ích. Đây là một phần trong loạt bài viết “Cách giải quyết các thuật toán FCC” của tôi về Các thách thức đối với thuật toán freeCodeCamp, trong đó tôi đề xuất một số giải pháp và giải thích từng bước những gì xảy ra bên trong.
Ba cách để lặp lại một chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Lặp lại một chuỗi lặp lại một chuỗi” của freeCodeCamp. Điều này liên quan đến…
Ba cách để đảo ngược một chuỗi trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Reverse a String”
Ba cách để thừa số hóa một số trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Factorialize a Number”
Hai cách để kiểm tra Palindromes trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.
Ba cách để tìm từ dài nhất trong chuỗi trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tìm từ dài nhất trong một chuỗi”.
Ba cách đặt tiêu đề cho một câu trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tiêu đề trường hợp một câu”.
Nếu bạn có giải pháp của riêng mình hoặc bất kỳ đề xuất nào, hãy chia sẻ chúng bên dưới phần bình luận.
Hoặc bạn có thể theo dõi tôi trên Trung bình, TwitterGithub và LinkedInngay sau khi bạn nhấp vào trái tim màu xanh bên dưới 😉
#StayCurious, #KeepOnHacking & #MakeItHappen!