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

JavaScriptで文字列内の各単語を反転させつつ、単語の順序はそのまま維持する方法

本記事では、文字列を引数として受け取るJavaScript関数を作成します。この関数は、文字列内の各単語を個別に反転させる役割を持ちます。ここでいう「単語」とは、両側が空白文字で囲まれている部分文字列、あるいは空白と文字列の先頭・末尾に挟まれた部分文字列を指します。

関数は最終的に、処理後の新しい文字列を返します。

例えば、入力文字列が以下の場合を見てみましょう。

const str = 'This is a string';

このとき、期待される出力は次の通りです。単語の中身だけが反転され、単語同士の順序は元のまま維持されている点に注目してください。

const output = 'sihT si a gnirts';

実装例:ループを使った基本的な方法

まずは、forループを使って各単語を後ろから1文字ずつ読み取り、新しい文字列を組み立てるシンプルな実装です。

const str = 'This is a string';
const reverseWords = (str = '') => {
    const reversed = [];
    str.split(" ").forEach(el => {
        let wordReversed = "";
        for (let i = el.length - 1; i >= 0; i--){
            wordReversed += el[i];
        };
        reversed.push(wordReversed);
    });
    return reversed.join(" ");
};
console.log(reverseWords(str));

出力結果

上記のコードをコンソールで実行すると、以下のように表示されます。

sihT si a gnirts

コードの解説

このコードの処理の流れは以下の通りです。

1. 文字列の分割: str.split(" ") により、元の文字列をスペース区切りで分割し、['This', 'is', 'a', 'string'] という単語の配列を取得します。
2. 各単語の反転: forEach で各単語を順に処理し、forループで末尾の文字から先頭の文字へ向かって1文字ずつ新しい変数 wordReversed に追加していきます。
3. 再結合: 反転済みの単語を配列に格納した後、reversed.join(" ") によってスペース区切りで連結し、目的の文字列を完成させます。

別解:split・reverse・join を組み合わせた簡潔な方法

よりモダンで簡潔に書きたい場合は、配列メソッドをチェーンして使う方法がおすすめです。

const reverseWords = (str = '') => {
    return str.split(' ')
              .map(word => word.split('').reverse().join(''))
              .join(' ');
};
console.log(reverseWords('This is a string'));

こちらの方法では、map 内で各単語を一度文字の配列に分解し(split(''))、reverse() で並べ替えてから(join(''))文字列に戻しています。ロジックが明確で可読性が高いため、実務でもよく使われるパターンです。

どちらのアプローチでも、単語の反転という要件を満たしつつ、単語全体の並び順は元の文字列どおりに保たれます。

  1. JavaScriptでスペースの位置を維持したまま文字列を反転させる方法

    問題空白(スペース)を含む可能性のある文字列を受け取り、各単語の文字順だけを反転させるJavaScript関数を作成することを考えます。求められる条件は次のとおりです。単語内部の文字は逆順に並べ替える単語と単語を区切るスペースの位置は元のまま維持する異なる単語の文字同士が入れ替わらないようにするアプローチ基本となるアイデアは、「元の文字列を末尾から先頭へ向かって走査し、空白以外の文字を結果用の文字列へ追加していく」というものです。文字を追加するたびに、結果文字列の現在の長さをインデックスとして元の文字列を参照し、その位置がスペースであれば同じくスペースを結果に加えます。こうすることで、スペース

  2. JavaScriptで特定の文字列の順序に従って文字列を並べ替える方法

    問題 2つの文字列 str1 と str2 を第1・第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、str1 を str2 に含まれる文字の出現順序に従って並べ替えます。 例えば、関数への入力が以下の場合を考えてみましょう。 入力 const str1 = coding; const str2 = gncabdi; 出力 const output = gncdio; 出力の説明 str2 の中で先に現れる文字が優先的に前に配置され、その後に後から現れる文字が続きます。そして最後に、str2 に存在しない残りの文字がそのまま並べられます。 解決のアプローチ