JavaScriptで部分文字列を抽出し、辞書式順序にソートした配列を返す方法
問題の概要
今回は、2つの配列 arr1 と arr2 を引数として受け取るJavaScript関数を作成します。この関数の要件は以下の通りです。
- arr1 の文字列のうち、arr2 のいずれかの文字列に「部分文字列」として含まれているものだけを抽出する
- 抽出した文字列を辞書式順序(レキシコグラフィカル順序)でソートする
- ソート済みの新しい配列として返す
実装コード
実際のコードは次のように記述できます。
const lexicographicalSort = (arr1 = [], arr2 = []) => {
let i, j;
const res = [];
outer: for (j = 0; j < arr1.length; j++) {
for (i = 0; i < arr2.length; i++) {
if (arr2[i].includes(arr1[j])) {
res.push(arr1[j]);
continue outer;
};
};
}
return res.sort();
};
const arr2 = ["lively", "alive", "harp", "sharp", "armstrong"];
const arr1 = ["xyz", "live", "strong"];
console.log(lexicographicalSort(arr1, arr2));コードの解説
この関数のポイントは以下の通りです。
- ラベル付きルート(
outer:):外側の for ループにラベルを付けることで、内側のループで条件が一致した時点でcontinue outer;を使い、外側のループの次の反復へ一気にスキップできます。これにより、同じ文字列が重複して追加されるのを防ぎます。 - 部分文字列の判定(
includes()):arr2[i].includes(arr1[j])により、arr2 の各文字列の中に arr1 の文字列が含まれているかどうかを簡単に判定できます。 - 最終的なソート(
res.sort()):一致した要素をすべてres配列に格納した後、sort()メソッドを呼び出すことで、デフォルトの辞書式順序(Unicode コードポイント順)で並べ替えて返します。
上記の例では、"lively" と "alive" に "live" が含まれており、"armstrong" に "strong" が含まれています。一方、"xyz" はどの文字列にも含まれていないため除外されます。
出力結果
コンソールには次のように出力されます。
[ 'live', 'strong' ]
このように、ラベル付きルートと includes() メソッドを組み合わせることで、簡潔かつ効率的に部分文字列のフィルタリングと辞書式順序でのソートを実現できます。
-
JavaScriptで配列の最初の要素を削除して返す方法【shift()メソッド】
JavaScriptで配列の最初の要素を削除するには、shift()メソッドを使用します。shift()メソッドは、配列の先頭にある要素を1つ取り除き、その取り除いた要素を戻り値として返します。shift()メソッドの特徴shift()はArrayオブジェクトの組み込みメソッドで、以下のような動作を行います。配列の最初(先頭)の要素を削除する削除された要素を戻り値として返す呼び出し元の配列自体も変更される(破壊的なメソッド)配列が空の場合は undefined を返すサンプルコード次のコードを実行すると、配列の最初の要素を削除し、その要素を取得して表示できます。<html>&nbs
-
JavaScriptのshift()メソッドで配列の先頭要素を削除する方法
JavaScript の shift() メソッドは、配列の先頭(最初)の要素を取り除くために使用されます。取り除かれた要素は戻り値として返されるため、「削除」と「取得」を同時に行える便利なメソッドです。shift() メソッドの構文array.shift()shift() は引数を必要とせず、呼び出すだけで配列の最初の要素が削除されます。なお、元の配列自体が変更される(破壊的メソッド)点には注意が必要です。また、空の配列に対して shift() を呼び出した場合は undefined が返されます。それでは、実際に shift() メソッドを使ったサンプルコードを見ていきましょう。例1:配列