JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】文字列内のすべての母音を末尾に移動させる方法

問題の概要

文字列を引数として受け取るJavaScript関数を作成します。この関数は、子音は元の相対的な位置を維持し、母音だけを文字列の末尾に移動させた新しい文字列を返す必要があります。

実装例

以下が実際のコードです。

const str = 'sample string';

const moveVowels = (str = '') => {
  const vowels = 'aeiou';
  let front = '';
  let rear = '';

  for(let i = 0; i < str.length; i++){
    const el = str[i];
    if(vowels.includes(el)){
      rear += el;
    }else{
      front += el;
    }
  }

  return front + rear;
};

console.log(moveVowels(str));

処理の流れを解説

このコードの仕組みを順番に見ていきましょう。

まず、判定対象となる母音「aeiou」を文字列として定義します。次に、結果を格納するための2つの変数 front(子音用)と rear(母音用)を空文字で初期化します。

その後、forループで文字列を1文字ずつ走査し、各文字が vowels.includes() によって母音かどうかを判定します。母音であれば rear に連結し、それ以外(子音や空白など)であれば front に連結していきます。

最後に front + rear を返すことで、子音が元の順序を保ったまま前方に、母音がすべて末尾に集められた文字列が完成します。

出力結果

smpl strngaei

入力文字列「sample string」に含まれる母音「a」「e」「i」がすべて末尾に移動し、子音と空白は元の相対的な位置関係を維持したまま「smpl strng」として出力されていることが確認できます。

補足:大文字への対応

上記のコードは小文字の母音のみに対応しています。大文字も含めて判定したい場合は、以下のように toLowerCase() を使うと便利です。

const moveVowels = (str = '') => {
  const vowels = 'aeiou';
  let front = '';
  let rear = '';

  for(const el of str){
    if(vowels.includes(el.toLowerCase())){
      rear += el;
    }else{
      front += el;
    }
  }

  return front + rear;
};

このように for...of 構文を使えば、より簡潔に記述できる点もポイントです。

  1. JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法

    問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す

  2. Javaの正規表現(RegEx)を使って文字列内の特殊文字をすべて末尾に移動する方法

    次の正規表現は、英字・数字・空白以外のすべての特殊文字にマッチします。つまり、英語のアルファベット、スペース、数字を除く全ての文字を検出できます。[^a-zA-Z0-9\\s+]文字列内の特殊文字をすべて末尾へ移動するには、まずこの正規表現を使って特殊文字を検出し、見つかったものを順番に1つの空文字列へ連結していきます。同時に、特殊文字以外の残りの文字を別の文字列へ連結し、最後にこの2つの文字列を結合することで目的の結果が得られます。ここでは、2つの実装方法を紹介します。例1:charAt()メソッドとmatches()メソッドを使う方法1文字ずつ取り出して正規表現と照合し、特殊文字かどうかを