JavaScriptで別の配列に基づいて配列の要素を結合・変更する方法
次のような、フレーズからなる参照用の配列があるとします。
const reference = ["your", "majesty", "they", "are", "ready"];
ここで、別の配列を基準として、上記の配列に含まれる一部の要素を結合する必要があります。たとえば、もう一方の配列が次のようなものだった場合を考えてみましょう。
const another = ["your", "they are"];
このとき、期待される結果は次のようになります。
result = ["your", "majesty", "they are", "ready"];
この例では、両方の配列の要素を比較し、最初の配列内で連続している複数の要素が、2番目の配列ではひとつのフレーズとして存在している場合に、それらを結合しています。
つまり、このような2つの配列を受け取り、結合処理を行った新しい配列を返すJavaScript関数を作成する必要があります。
実装例
const reference = ["your", "majesty", "they", "are", "ready"];
const another = ["your", "they are"];
const joinByReference = (reference = [], another = []) => {
const res = [];
const filtered = another.filter(a => a.split(" ").length > 1);
while(filtered.length) {
let anoWords = filtered.shift();
let len = anoWords.split(" ").length;
while(reference.length>len) {
let refWords = reference.slice(0,len).join(" ");
if (refWords == anoWords) {
res.push(refWords);
reference = reference.slice(len,reference.length);
break;
};
res.push(reference.shift());
};
};
return [...res, ...reference];
};
console.log(joinByReference(reference, another));コードの仕組み
この関数は、以下の手順で動作します。
ステップ1: filter() を使って、another 配列の中からスペースを含む要素(つまり複数の単語から構成されるフレーズ)だけを抽出します。
ステップ2: while ループで各フレーズを順番に取り出し、その単語数と同じ個数ぶんだけ reference 配列の先頭から要素を取得して結合します。
ステップ3: 結合した文字列が対象のフレーズと一致すれば、それを結果配列に追加し、元の配列から該当部分を削除します。一致しない場合は、先頭の要素を1つずつ結果配列へ移動させて処理を続けます。
ステップ4: 最後に、残った要素をスプレッド構文を使って結果配列に結合して返します。
出力
上記のコードを実行すると、コンソールには次の出力が表示されます。
[ 'your', 'majesty', 'they are', 'ready' ]
このように、slice()、shift()、join() といった標準的な配列メソッドを組み合わせることで、複数の配列間でフレーズの対応関係を確認しながら、柔軟に要素を結合することができます。
-
JavaScriptのshift()メソッドで配列の先頭要素を削除する方法
JavaScript の shift() メソッドは、配列の先頭(最初)の要素を取り除くために使用されます。取り除かれた要素は戻り値として返されるため、「削除」と「取得」を同時に行える便利なメソッドです。shift() メソッドの構文array.shift()shift() は引数を必要とせず、呼び出すだけで配列の最初の要素が削除されます。なお、元の配列自体が変更される(破壊的メソッド)点には注意が必要です。また、空の配列に対して shift() を呼び出した場合は undefined が返されます。それでは、実際に shift() メソッドを使ったサンプルコードを見ていきましょう。例1:配列
-
JavaScriptの配列reverse()メソッドとは?使い方とサンプルコードを解説
JavaScriptのreverse()メソッドは、配列の要素を逆順に並べ替えるために使用されるメソッドです。呼び出すと元の配列そのものが反転され、その結果の配列が戻り値として返されます。構文array.reverse()reverse()メソッドのポイント引数は不要で、呼び出した配列自体を直接書き換えます(破壊的なメソッド)。戻り値は、要素が反転された配列への参照です。元の配列を変更せずに反転したい場合は、ES2023で追加されたtoReversed()メソッドを使うと便利です。それでは、実際にJavaScriptでreverse()メソッドを実装してみましょう。例1:基本的な使い方<