JavaScriptでネストされたオブジェクトからキーを抽出する方法
はじめに
JavaScriptでは、入れ子(ネスト)構造を持つオブジェクトから特定の値に対応するキー名を取得したい場面があります。この記事では、二重ループ(for...in文)を使って、ネストされたオブジェクトの中から目的の値を含むキーを効率的に抽出する方法を解説します。
ネストされたオブジェクトの作成
まず、サンプルとして使用するネストされたオブジェクトを作成しましょう。
var details = {
"teacherDetails":
{
"teacherName": ["John", "David"]
},
"subjectDetails":
{
"subjectName": ["MongoDB", "Java"]
}
}このオブジェクトは、第1階層に「teacherDetails」と「subjectDetails」という2つのキーを持ち、それぞれの中にさらに配列形式のデータが格納されています。
キーを抽出するコード
それでは、指定した値(ここでは「Java」)が含まれるキーを抽出してみましょう。以下がそのコードです。
var details = {
"teacherDetails":
{
"teacherName": ["John", "David"]
},
"subjectDetails":
{
"subjectName": ["MongoDB", "Java"]
}
}
var objectName, nestedObject;
var name = "Java";
for(var key in details){
for(var secondKey in details[key]){
if(details[key][secondKey].includes(name)){
objectName = key;
nestedObject = secondKey;
}
}
}
console.log(objectName + ', ' + nestedObject);コードの仕組み
- 外側の for...in ループで、オブジェクト「details」の第1階層のキー(teacherDetails、subjectDetails)を順番に取り出します。
- 内側の for...in ループで、各キーに対応するネストされたオブジェクト内のキー(teacherName、subjectName)を取り出します。
- includes() メソッドで、その配列に検索対象の値("Java")が含まれているかどうかを判定します。
- 一致した場合、該当する階層のキー名をそれぞれ変数に格納し、最後に console.log() で出力します。
プログラムの実行方法
上記のプログラムはNode.js環境で実行できます。ターミナルから以下のコマンドを使用してください。
node fileName.js
ここでは、ファイル名を「demo96.js」として保存しています。
実行結果
プログラムを実行すると、以下のような出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo96.js subjectDetails, subjectName
このように、「Java」という値は「subjectDetails」内の「subjectName」に含まれていたため、両方のキー名が出力されました。
まとめ
for...in ループを組み合わせることで、ネストされたオブジェクトの任意の階層から目的の値を検索し、対応するキーを簡単に抽出できます。より深い階層のオブジェクトに対応したい場合は、再帰関数を利用すると汎用性の高い実装が可能です。
-
JavaScriptで変数の値を使ってオブジェクトのプロパティを作成する方法
JavaScriptには、オブジェクトのプロパティを作成・アクセスするための記法が2種類あります。ひとつはドット記法、もうひとつはブラケット記法(角括弧記法)です。変数に格納された値をプロパティ名として使いたい場合は、ドット記法では対応できないため、ブラケット記法を使用します。基本的な方法:ブラケット記法を使う例以下のように、変数名をそのまま角括弧の中に入れることで、変数の値をプロパティ名として設定できます。const obj = { a: foo }; const prop = bar; // 変数propの値「bar」をプロパティ名として設定 obj[prop] = baz; conso
-
JavaScriptで変数を使ってオブジェクトのキーを動的に設定する方法
JavaScriptで変数を使ってオブジェクトのキーを設定する方法 JavaScriptでは、ブラケット記法(角括弧 [])を使用することで、変数の値をオブジェクトのキーとして動的に設定できます。ドット記法では変数をキーとして扱うことができないため、動的なキー設定にはブラケット記法が必須となります。 以下に、ユーザーが入力したプロパティ名とプロパティ値をオブジェクトに追加するサンプルコードを示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="U