JavaScriptで文字列内の隣接する単語を入れ替える方法
本記事では、文字列を受け取り、その文字列内の隣接する単語同士を入れ替えるJavaScript関数の作成方法を解説します。
処理の概要
例えば、次のような入力文字列が与えられたとします。
const str = "This is a sample string only";
この場合、期待される出力は以下のようになります。
"is This sample a only string"
ご覧のとおり、隣り合う単語が2つずつペアになって入れ替えられています。それでは、この関数のコードを見ていきましょう。
実装コード
以下がそのコードです。
const str = "This is a sample string only";
const replaceWords = str => {
return str.split(" ").reduce((acc, val, ind, arr) => {
if(ind % 2 === 1){
return acc;
}
acc += ((arr[ind+1] || "") + " " + val + " ");
return acc;
}, "");
};
console.log(replaceWords(str));コードの解説
この関数の仕組みは以下のとおりです。
1. split(" ")で文字列を分割
まず、split(" ")メソッドを使って、入力文字列をスペース区切りで単語の配列に変換します。上記の例では ["This", "is", "a", "sample", "string", "only"] という配列が生成されます。
2. reduce()で配列を走査
次に、reduce()メソッドで配列を先頭から順に処理します。コールバック関数の第3引数 ind(現在のインデックス)が奇数の場合、その単語は直前の単語とすでにペアとして処理済みなので、そのままアキュムレータを返してスキップします。
3. 偶数インデックスで単語を入れ替え
インデックスが偶数の場合は、次の単語(arr[ind+1])を先に、現在の単語(val)を後に連結することで、隣接する2つの単語を入れ替えます。なお、配列の末尾で次の単語が存在しない場合に備え、arr[ind+1] || "" というフォールバック処理を入れることで、単語数が奇数の文字列でもエラーなく動作します。
出力結果
コンソールには以下のように出力されます。
is This sample a only string
このように、split()とreduce()を組み合わせることで、簡潔かつ効率的に隣接単語の入れ替え処理を実装できます。
-
マジックストリング(魔法の文字列)問題をJavaScriptで解く方法
マジックストリングの問題概要マジックストリング(魔法の文字列)とは、「1」と「2」だけから構成され、次の性質を持つ特別な文字列です。この文字列が「マジック(魔法)」と呼ばれるのは、連続する「1」や「2」のかたまり(グループ)ごとの出現回数をつなぎ合わせると、元の文字列そのものが再現されるからです。文字列 str の最初の部分は次のようになっています。str = 1221121221221121122……str 内の連続した「1」「2」をそれぞれグループに分けると、次のようになります。1 22 11 2 1 22 1 22 11 2 11 22 ……さらに、各グループにおける「1」または「2」の
-
JavaScriptで文字列内の単語を逆順に並べ替える方法
問題文(センテンス)を表す文字列を受け取り、その中に含まれる単語の順序を逆にして、新しい文字列として返すJavaScript関数を作成する必要があります。つまり、最後の単語が最初に、最後から2番目の単語が2番目に来るように、すべての単語の並びをひっくり返すということです。解決のアプローチこの問題は、標準的な配列メソッドを組み合わせるだけでシンプルに実装できます。手順は以下のとおりです。split( ) — 文字列をスペースで分割し、単語の配列を作成するreverse() — 配列の要素の順序を反転させるjoin( ) — 反転した配列をスペースで連結し、再び文字列に戻すコード例以下が実際のコー