JavaScriptで2つの文字列を2文字ずつ交互に結合する方法
今回求められているのは、2つの文字列を受け取り、最初の文字列から2文字、次に2番目の文字列から2文字、また最初の文字列から…という具合に交互に文字を取り出して、新しい文字列を作成して返すJavaScript関数です。
たとえば、入力が次の2つの文字列だったとします。
const str1 = 'Hello world'; const str2 = 'How are you btw';
このとき、期待される出力は次のようになります。
const output = 'HeHollw o arwoe rlyodu btw';
実装コード
それでは、この関数を実際にコードにしてみましょう。
const str1 = 'Hello world';
const str2 = 'How are you btw';
const twiceJoin = (str1 = '', str2 = '') => {
let res = '', i = 0, j = 0, temp = '';
for(let ind = 0; i < str1.length; ind++){
if(ind % 2 === 0){
temp = (str1[i] || '') + (str1[i + 1] || '');
res += temp;
i += 2;
}else{
temp = (str2[j] || '') + (str2[j + 1] || '');
res += temp;
j += 2;
}
}
while(j < str2.length){
res += str2[j++];
}
return res;
};
console.log(twiceJoin(str1, str2));
出力結果
コンソールには次の出力が表示されます。
HeHollw o arwoe rlyodu btw
コードの解説
この関数の動きを、ステップごとに整理してみます。
- i と j の役割:それぞれ第1・第2引数の文字列における「現在の読み取り位置」を管理するインデックスです。
- 交互の切り替え:ループカウンタ ind を2で割った余り(ind % 2)が0かどうかで、偶数回は str1 から、奇数回は str2 から2文字ずつ取り出す番を交互に切り替えています。
- 安全な2文字取得:(str[i] || '') + (str[i + 1] || '') の形式により、文字列の終端を超えるアクセスで undefined が混ざるのを防ぎ、存在しない位置は空文字列として扱われます。
- 残りの処理:str1 側のループ条件(i < str1.length)が満たされなくなるとループを抜け、str2 にまだ残っている文字を while 文で一括して末尾に連結します。
なお、このアルゴリズムの計算量は、両文字列の長さの合計に対して線形時間 O(n + m) となり、非常に効率的です。
より簡潔な代替実装:slice() を使う方法
String.prototype.slice() を利用すると、範囲外アクセス時に自動的に空文字列が返されるため、境界チェックを明示的に書く必要がなくなり、より読みやすいコードになります。
const twiceJoin = (str1 = '', str2 = '') => {
let res = '';
for (let k = 0; k < Math.max(str1.length, str2.length); k += 2) {
if (k < str1.length) res += str1.slice(k, k + 2);
if (k < str2.length) res += str2.slice(k, k + 2);
}
return res;
};
こちらも先ほどの実装とまったく同じ出力('HeHollw o arwoe rlyodu btw')を返します。可読性を重視したい場合は、こちらの書き方を選ぶとよいでしょう。
-
JavaScriptで2つの文字列を連結する方法|スペースの有無で変わる正しい書き方
JavaScriptで2つの文字列をつなげる(連結する)には、「+」演算子を使用します。文字列と文字列の間にスペースを入れたい場合も、この演算子だけで簡単に実現できます。ポイントは、「1つ目の文字列の末尾にすでにスペースが含まれているかどうか」です。含まれている場合は余計な処理は不要で、含まれていない場合は半角スペースを明示的に挟む必要があります。それぞれのケースを見ていきましょう。ケース1:最初の文字列にすでにスペースが含まれている場合1つ目の文字列の末尾にスペースが含まれているなら、単純に連結だけで十分です。スペースを明示的に追加すると、逆に空白が二重になってしまうので注意しましょう。コー
-
【JavaScript】filterとjoinを組み合わせて、条件に合う配列要素だけを結合する方法
JavaScriptでは、filter()メソッドとjoin()メソッドを組み合わせることで、条件を満たす要素だけを抽出し、それらを任意の区切り文字で1つの文字列に結合できます。本記事では、配列の中から「2で割り切れる要素(偶数)」だけを取り出して結合する具体例を、動作するサンプルコードとともに解説します。 処理の流れ:filter() と join() の役割 filter():コールバック関数が true を返した要素だけを集めた新しい配列を作成します。元の配列は変更されません。 join():配列内のすべての要素を、引数で指定した区切り文字で連結し、1つの文字列として返します。引数