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 vấn đề “Lặp lại một chuỗi lặp lại một chuỗi” của freeCodeCampthách đấu. Điều này liên quan đến việc lặp lại một chuỗi một số lần nhất định.

Có ba cách tiếp cận tôi sẽ đề cập:

  1. sử dụng vòng lặp while
  2. sử dụng đệ quy
  3. sử dụng phương thức lặp lại ES6()

Thử thách thuật toán Mô tả

Lặp lại một chuỗi đã cho (đối số đầu tiên) num lần (đối số thứ hai). Trả về một chuỗi rỗng nếu num không phải là số dương.

function repeatStringNumTimes(str, num) {
  return str;
}
repeatStringNumTimes("abc", 3);

Các trường hợp thử nghiệm được cung cấp

repeatStringNumTimes("*", 3) should return "***".

repeatStringNumTimes("abc", 3) should return "abcabcabc".

repeatStringNumTimes("abc", 4) should return "abcabcabcabc".

repeatStringNumTimes("abc", 1) should return "abc".

repeatStringNumTimes("*", 8) should return "********".

repeatStringNumTimes("abc", -2) should return "".

Cách tiếp cận số 1: Lặp lại chuỗi bằng vòng lặp While

Một câu lệnh while thực thi câu lệnh của nó miễn là một điều kiện cụ thể được đánh giá là đúng.

Một tuyên bố trong khi trông như thế này:

while (condition)
  statement

với một điều kiện được đánh giá trước mỗi lần đi qua vòng lặp. Nếu điều kiện là đúng, câu lệnh được thực hiện. Nếu điều kiện là sai, thì việc thực thi tiếp tục với bất kỳ câu lệnh nào sau vòng lặp while.

Tuyên bố được thực hiện miễn là điều kiện là đúng. Đây là giải pháp:


function repeatStringNumTimes(string, times) {
  // Step 1. Create an empty string that will host the repeated string
  var repeatedString = "";

  // Step 2. Set the While loop with (times > 0) as the condition to check
  while (times > 0) { // As long as times is greater than 0, the statement is executed
    // The statement
    repeatedString += string; // Same as repeatedString = repeatedString + string;
    times--; // Same as times = times - 1;
  }
  /* While loop logic
                      Condition       T/F       repeatedString += string      repeatedString        times
    First iteration    (3 > 0)        true            "" + "abc"                  "abc"               2
    Second iteration   (2 > 0)        true           "abc" + "abc"               "abcabc"             1
    Third iteration    (1 > 0)        true          "abcabc" + "abc"            "abcabcabc"           0
    Fourth iteration   (0 > 0)        false
    }
  */
  
  // Step 3. Return the repeated string
  return repeatedString; // "abcabcabc"
}

repeatStringNumTimes("abc", 3);

Và một lần nữa, không có bình luận:

function repeatStringNumTimes(string, times) {
  var repeatedString = "";
  while (times > 0) {
    repeatedString += string;
    times--;
  }
  return repeatedString;
}
repeatStringNumTimes("abc", 3);

Cách tiếp cận #2: Lặp lại Chuỗi bằng Điều kiện và Đệ quy

Đệ quy là một kỹ thuật để lặp lại một thao tác bằng cách để một hàm gọi chính nó lặp đi lặp lại cho đến khi nó đạt được kết quả. Có một vài tính năng chính của đệ quy phải được đưa vào để nó hoạt động bình thường.

  • đầu tiên là một trường hợp cơ bản: đây là một câu lệnh, thường nằm trong mệnh đề điều kiện như ifđiều đó dừng đệ quy.
  • thứ hai là một trường hợp đệ quy: đây là câu lệnh mà hàm đệ quy được gọi trên chính nó.
Đọc thêm  JavaScript setTimeout() – JS Timer để trì hoãn N giây

Đây là giải pháp:

function repeatStringNumTimes(string, times) {
  // Step 1. Check if times is negative and return an empty string if true
  if (times < 0) {
    return "";
  }
  
  // Step 2. Check if times equals to 1 and return the string itself if it's the case.
  if (times === 1) {
    return string;
  }
  
  // Step 3. Use recursion
  else {
    return string + repeatStringNumTimes(string, times - 1); // return "abcabcabc";
  }
  /* 
    First Part of the recursion method
    You need to remember that you won’t have just one call, you’ll have several nested calls
                     times       string + repeatStringNumTimes(string, times - 1)
      1st call         3                 "abc" + ("abc", 3 - 1)
      2nd call         2                 "abc" + ("abc", 2 - 1)
      3rd call         1                 "abc" => if (times === 1) return string;
      4th call         0                  ""   => if (times <= 0) return "";
    Second part of the recursion method
      4th call will return      ""
      3rd call will return     "abc"
      2nd call will return     "abc"
      1st call will return     "abc"
    The final call is a concatenation of all the strings
    return "abc" + "abc" + "abc"; // return "abcabcabc";
  */
}
repeatStringNumTimes("abc", 3);

Và một lần nữa, không có bình luận:

function repeatStringNumTimes(string, times) {
  if(times < 0) 
    return "";
  if(times === 1) 
    return string;
  else 
    return string + repeatStringNumTimes(string, times - 1);
}
repeatStringNumTimes("abc", 3);

Cách tiếp cận #3: Lặp lại Chuỗi bằng phương thức lặp lại () của ES6

Đối với giải pháp này, bạn sẽ sử dụng phương thức String.prototype.repeat():

  • Các repeat() phương thức xây dựng và trả về một chuỗi mới chứa số bản sao đã chỉ định của chuỗi mà nó được gọi, nối với nhau.
Đọc thêm  Giới thiệu nhanh về pipe() và soạn thảo() trong JavaScript

Đây là giải pháp:


function repeatStringNumTimes(string, times) {
  //Step 1. If times is positive, return the repeated string
  if (times > 0) { // (3 > 0) => true
    return string.repeat(times); // return "abc".repeat(3); => return "abcabcabc";
  }
  
  //Step 2. Else if times is negative, return an empty string if true
  else {
    return "";
  }
}

repeatStringNumTimes("abc", 3);

Và một lần nữa, không có bình luận:

function repeatStringNumTimes(string, times) {
  if (times > 0)
    return string.repeat(times);
  else
    return "";
}
repeatStringNumTimes("abc", 3);

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/else, như thế này:

times > 0 ? string.repeat(times) : "";

Điều này có thể được đọc là:

if (times > 0) {    
    return string.repeat(times);
} else {
    return "";
}

Sau đó, bạn có thể trả về toán tử bậc ba trong hàm của mình:

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.

Hai cách để xác nhận kết thúc của 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 “Xác nhận Kết thúc” của freeCodeCamp.

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.

Đọc thêm  Lời hứa JavaScript – Giải thích về các phương thức Promise.then, Promise.Catch và Promise.Lastly

Hoặc bạn có thể theo dõi tôi trên Trung bình, TwitterGithubLinkedInngay sau khi bạn nhấp vào trái tim màu xanh bên dưới 😉

#‎StayCurious, #‎KeepOnHacking & #‎MakeItHappen!

Tài nguyên bổ sung





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status