JavaScriptでオブジェクトのキーを前方一致の検索文字列でフィルタリングする方法
JavaScriptでは、オブジェクトと検索文字列を受け取り、その検索文字列で始まるキーだけを抽出した新しいオブジェクトを返す関数を作成できます。本記事では、具体的な実装方法をコード例とともに解説します。
実装例
以下は、科目コードをキーとするオブジェクトから、指定した文字列で始まるキーのみを抽出するサンプルコードです。
const obj = {
"PHY": "Physics",
"MAT": "Mathematics",
"BIO": "Biology",
"COM": "Computer Science",
"SST": "Social Studies",
"SAN": "Sanskrit",
"ENG": "English",
"HIN": "Hindi",
"ESP": "Spanish",
"BST": "Business Studies",
"ECO": "Economics",
"CHE": "Chemistry",
"HIS": "History"
};
const str = 'en';
const returnFilteredObject = (obj, str) => {
const filteredObj = {};
Object.keys(obj).forEach(key => {
if(key.substr(0, str.length).toLowerCase() === str.toLowerCase()){
filteredObj[key] = obj[key];
}
});
return filteredObj;
};
console.log(returnFilteredObject(obj, str));
コードの解説
このコードの仕組みはシンプルです。Object.keys()を使ってオブジェクトのすべてのキーを取得し、それぞれのキーについて以下の処理を行います。
substr(0, str.length)でキーの先頭から検索文字列と同じ長さ分の部分文字列を取り出し、toLowerCase()で両者を小文字に変換してから比較することで、大文字・小文字を区別しない前方一致チェックを実現しています。条件に一致したキーとその値は、新しいオブジェクトfilteredObjに格納され、最終的にこのオブジェクトが返されます。
パフォーマンス改善のポイント
上記の実装では、条件に合致したキーを新しいオブジェクトに追加していく方式を採用していますが、別のアプローチもあります。元のオブジェクト自体を変更しても問題ないケースでは、新規オブジェクトを生成する代わりに、条件に合致しない不要なプロパティをdelete演算子で削除していく方が、メモリ効率の面で有利になる場合があります。用途や要件に応じて、どちらの方式を選択するとよいでしょう。
実行結果
このコードをコンソールで実行すると、次の出力が得られます。検索文字列「en」で始まるキー「ENG」のみが抽出されていることが確認できます。
{
ENG: "English"
}
まとめ
Object.keys()と配列の反復処理、そして部分文字列比較を組み合わせることで、オブジェクトのキーを柔軟にフィルタリングできます。大文字小文字を無視したい場合はtoLowerCase()による正規化を忘れずに行いましょう。また、ES2022以降の環境ではObject.fromEntries()やfilter()を組み合わせることで、より簡潔に関数型スタイルで記述することも可能です。
-
JavaScriptのRegExp(正規表現)オブジェクトとは?基本の使い方をわかりやすく解説
RegExp(正規表現)オブジェクトは、テキストに対してパターンマッチングを行い、目的の文字列部分を検索・抽出するために使用されます。JavaScriptでは、RegExpオブジェクトを「RegExpコンストラクタ」または「リテラル構文」の2通りの方法で作成できます。 RegExpオブジェクトの作成方法 コンストラクタを使用する場合: new RegExp(pattern) リテラル構文を使用する場合: /pattern/ 主なメソッド test():文字列がパターンに一致するかどうかを真偽値(true / false)で返します。 exec():パターンに一致した文字列を返します。
-
JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説
オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars