JavaScriptで文字列を繰り返す3つの方法

この記事では、freeCodeCampの「文字列を繰り返す」という課題を解決する方法について説明します。これには、文字列を特定の回数繰り返すことが含まれます。

私がカバーする3つのアプローチがあります:

  1. whileループを使用する
  2. 再帰を使用する
  3. ES6repeat()メソッドを使用する

アルゴリズムチャレンジの説明

指定された文字列(最初の引数)をnum(2番目の引数)回繰り返します。がnum正の数でない場合は、空の文字列を返します。
function repeatStringNumTimes(str, num) { return str; } repeatStringNumTimes("abc", 3);

提供されたテストケース

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 "".

アプローチ#1:Whileループで文字列を繰り返す

whileステートメントは、指定された条件がtrueと評価される限り、そのステートメントを実行します。

whileステートメントは次のようになります。

while (condition) statement

各ループを通過する前に評価される条件で。条件が真の場合、ステートメントが実行されます。条件がfalseの場合、実行はwhileループの後の任意のステートメントから続行されます。

条件が真である限り、ステートメントは実行されます。解決策は次のとおりです。

 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);

そして再び、コメントなしで:

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

アプローチ#2:条件付き再帰を使用して文字列を繰り返す

再帰は、関数が結果に到達するまでそれ自体を繰り返し呼び出すことによって、操作を反復するための手法です。再帰が正しく機能するために含める必要のある重要な機能がいくつかあります。

  • 1つ目は基本ケースです。これは、通常はのような条件節内にあるif、再帰を停止するステートメントです。
  • 2つ目は再帰的なケースです。これは、再帰関数がそれ自体で呼び出されるステートメントです。

解決策は次のとおりです。

function repeatStringNumTimes(string, times) { // Step 1. Check if times is negative and return an empty string if true if (times  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);

そして再び、コメントなしで:

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

アプローチ#3:ES6のrepeat()メソッドを使用して文字列を繰り返す

このソリューションでは、String.prototype.repeat()メソッドを使用します。

  • このrepeat()メソッドは、呼び出された文字列の指定された数のコピーを連結して含む新しい文字列を作成して返します。

解決策は次のとおりです。

 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);

そして再び、コメントなしで:

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

次のように、if / elseステートメントのショートカットとして三項演算子を使用できます。

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

これは次のように読むことができます:

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

次に、関数で三項演算子を返すことができます。

これがお役に立てば幸いです。これは、freeCodeCampアルゴリズムの課題に関する私の「FCCアルゴリズムを解決する方法」シリーズの記事の一部です。ここでは、いくつかの解決策を提案し、内部で何が起こるかを段階的に説明します。

JavaScriptで文字列の終わりを確認する2つの方法

この記事では、freeCodeCampの「ConfirmtheEnding」チャレンジを解決する方法を説明します。

JavaScriptで文字列を逆にする3つの方法

この記事は、Free CodeCampの基本的なアルゴリズムスクリプト「文字列を逆にする」に基づいています。

JavaScriptで数値を因数分解する3つの方法

この記事は、Free CodeCampの基本的なアルゴリズムスクリプト「FactorializeaNumber」に基づいています。

JavaScriptでパリンドロームをチェックする2つの方法

この記事は、Free Code Camp Basic AlgorithmScripting「CheckforPalindromes」に基づいています。

JavaScriptで文字列内の最長の単語を見つける3つの方法

This article is based on Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Three Ways to Title Case a Sentence in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.

If you have your own solution or any suggestions, share them below in the comments.

Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)

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

Additional Resources

  • while loop — MDN
  • repeat() method — MDN
  • recursion — MDN
  • Ternary Operator — MDN