「repeat」だけじゃない!JavaScriptで文字列を効率的に繰り返す5つの方法とは?


String.prototype.repeat() メソッドは、JavaScript で文字列を指定回数繰り返すために使用されます。このメソッドは、元の文字列を count 回コピーして結合した新しい文字列を返します。

構文

string.repeat(count);

引数

  • count: 文字列を繰り返す回数。0 以上の実数値である必要があります。

戻り値

  • 元の文字列を count 回繰り返した新しい文字列。

const str = 'ハロー';
const repeatedStr = str.repeat(3);
console.log(repeatedStr); // 出力: ハローハローハロー
  • String.prototype.repeat() メソッドは、ES6 で導入されました。
  • count が非数値の場合、TypeError がスローされます。
  • count が 0 以下の場合、空文字列が返されます。
  • 文字列の装飾
  • 空白文字の挿入
  • 文字列パターンの生成
  • JavaScript の学習については、様々なリソースが用意されています。書籍、Webサイト、オンラインコースなど、自分に合った方法で学習を進めてください。


const pattern = '*#';
const repeatedPattern = pattern.repeat(5);
console.log(repeatedPattern); // 出力: *****#*****#*****#*****#*****#

例 2: 空白文字の挿入

const numbers = [1, 2, 3, 4, 5];
const formattedNumbers = numbers.join(', ');
console.log(formattedNumbers); // 出力: 1, 2, 3, 4, 5

const formattedNumbersWithSpaces = numbers.join(' , ');
console.log(formattedNumbersWithSpaces); // 出力: 1 , 2 , 3 , 4 , 5

例 3: 文字列の装飾

const title = 'JavaScript';
const decoratedTitle = title.padStart(20, '=');
console.log(decoratedTitle); // 出力: ==============JavaScript

例 4: アニメーションの作成

const loadingDots = '.';
let dots = '';

const intervalId = setInterval(() => {
  dots += loadingDots;
  console.log(dots);

  if (dots.length === 4) {
    dots = '';
  }
}, 500);

setTimeout(() => clearInterval(intervalId), 2000);
const symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+{}|;:<>?=-~';
const passwordLength = 16;

function generatePassword() {
  let password = '';

  for (let i = 0; i < passwordLength; i++) {
    password += symbols[Math.floor(Math.random() * symbols.length)];
  }

  return password;
}

const password = generatePassword();
console.log(password);


for ループ

function repeatString(str, count) {
  let repeatedStr = '';
  for (let i = 0; i < count; i++) {
    repeatedStr += str;
  }
  return repeatedStr;
}

const str = 'ハロー';
const repeatedStr = repeatString(str, 3);
console.log(repeatedStr); // 出力: ハローハローハロー

利点

  • シンプルで分かりやすい

欠点

  • String.prototype.repeat() メソッドよりも非効率的な場合がある

再帰関数

function repeatString(str, count) {
  if (count === 0) {
    return '';
  } else {
    return str + repeatString(str, count - 1);
  }
}

const str = 'ハロー';
const repeatedStr = repeatString(str, 3);
console.log(repeatedStr); // 出力: ハローハローハロー

利点

  • for ループよりもエレガントなコードになる場合がある

欠点

  • 深い再帰呼び出しになると、スタックオーバーフローが発生する可能性がある

Array.prototype.fill()メソッドと Array.prototype.join() メソッド

function repeatString(str, count) {
  const repeatedArray = Array(count).fill(str);
  return repeatedArray.join('');
}

const str = 'ハロー';
const repeatedStr = repeatString(str, 3);
console.log(repeatedStr); // 出力: ハローハローハロー

利点

  • 比較的新しい方法で、関数型プログラミングのスタイルに合致している

欠点

  • String.prototype.repeat() メソッドよりも冗長なコードになる場合がある

テンプレートリテラル

const str = 'ハロー';
const count = 3;
const repeatedStr = `${str.repeat(count)}`;
console.log(repeatedStr); // 出力: ハローハローハロー

利点

  • 簡潔で読みやすいコードになる

欠点

  • テンプレートリテラルがサポートされていない古いブラウザでは動作しない

サードパーティ製のライブラリ

利点

  • 多くのユーティリティ関数がすぐに利用できる
  • プロジェクトにライブラリを追加する必要がある