【JavaScript】reverse()を使わずに文字列の単語の並びを逆順にする方法
概要
JavaScriptで、文字列を唯一の引数として受け取る関数を作成することを考えます。この関数は、文字列内の単語の並び順を逆にして、新しい文字列として返す必要があります。
ただし、重要な条件がひとつあります。それは、組み込みの配列メソッドである reverse() を使用してはいけないという点です。
例
たとえば、入力文字列が次の場合:
const str = 'this is a string';
期待される出力は次のとおりです:
string a is this
実装コード
以下が実際のコード例です:
const str = 'this is a string';
const reverseWordOrder = (str = '') => {
const strArr = str.split(' ');
let temp = '';
const { length } = strArr;
for(let i = 0; i < length / 2; i++){
temp = strArr[i];
strArr[i] = strArr[length - 1 - i];
strArr[length - 1 - i] = temp;
};
return strArr.join(' ');
};
console.log(reverseWordOrder(str));コードの解説
この関数の処理の流れは以下の3ステップです。
- 分割:
split(' ')を使って、文字列をスペースで区切り、単語ごとの配列に変換します。 - 入れ替え: 配列の先頭と末尾から順番に要素をスワップしていきます。ループは配列長の半分(
length / 2)回まわせば十分で、これだけですべての要素が逆順になります。 - 結合: 最後に
join(' ')で配列を再びスペース区切りの文字列に戻して返します。
一時変数 temp を使ったスワップ処理によって、reverse() メソッドに頼らずに配列の順序を反転させているのがポイントです。
出力結果
コンソールには次のように表示されます:
string a is this
まとめ
このように、split()・手動のスワップ処理・join() を組み合わせることで、reverse() を使わずに文字列の単語順を簡単に反転できます。なお、連続するスペースや前後の余分な空白が含まれる可能性がある場合は、trim() や正規表現による前処理を追加すると、より堅牢な実装になります。
-
JavaScriptでスペースの位置を維持したまま文字列を反転させる方法
問題空白(スペース)を含む可能性のある文字列を受け取り、各単語の文字順だけを反転させるJavaScript関数を作成することを考えます。求められる条件は次のとおりです。単語内部の文字は逆順に並べ替える単語と単語を区切るスペースの位置は元のまま維持する異なる単語の文字同士が入れ替わらないようにするアプローチ基本となるアイデアは、「元の文字列を末尾から先頭へ向かって走査し、空白以外の文字を結果用の文字列へ追加していく」というものです。文字を追加するたびに、結果文字列の現在の長さをインデックスとして元の文字列を参照し、その位置がスペースであれば同じくスペースを結果に加えます。こうすることで、スペース
-
JavaScriptで特定の文字列の順序に従って文字列を並べ替える方法
問題 2つの文字列 str1 と str2 を第1・第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、str1 を str2 に含まれる文字の出現順序に従って並べ替えます。 例えば、関数への入力が以下の場合を考えてみましょう。 入力 const str1 = coding; const str2 = gncabdi; 出力 const output = gncdio; 出力の説明 str2 の中で先に現れる文字が優先的に前に配置され、その後に後から現れる文字が続きます。そして最後に、str2 に存在しない残りの文字がそのまま並べられます。 解決のアプローチ