JavaScriptのmap()メソッドを使ってネストされたオブジェクトにアクセスする方法
まず、次のような「ネストされたオブジェクト」(オブジェクトの中にさらに別のオブジェクトが含まれている構造)が配列として存在すると仮定しましょう。
var details = [
{
id:"101",
firstName:"John",
lastName:"Smith",
age:25,
countryName:"US",
subjectDetails: {
subjectId:"Java-101",
subjectName:"Introduction to Java"
},
},
{
"uniqueId": "details_10001"
}
]
この配列のポイントは、各要素の構造が異なっていることです。1つ目の要素にはsubjectDetailsプロパティが存在しますが、2つ目の要素には存在しません。そのため、ネストされたプロパティにアクセスする際は、事前にその存在を確認しないと実行時エラーになる可能性があります。
そこで、map()メソッドとtypeof演算子を組み合わせることで、ネストされたオブジェクトへ安全にアクセスできます。以下がそのコードです。
コード例
var details = [
{
id:"101",
firstName:"John",
lastName:"Smith",
age:25,
countryName:"US",
subjectDetails: {
subjectId:"Java-101",
subjectName:"Introduction to Java"
},
},
{
"uniqueId": "details_10001"
}
]
details.map((nestedObject)=>{
if (typeof nestedObject.subjectDetails != 'undefined')
console.log("The subject Name="+nestedObject.subjectDetails.subjectName);
})
コードの解説
map()メソッドは、配列detailsの各要素に対して順番にコールバック関数を実行します。typeof演算子を使い、各要素にsubjectDetailsプロパティが存在するかどうか(undefinedでないか)を判定します。- プロパティが存在する要素のみ、ネストされたオブジェクト内の
subjectNameの値をコンソールに出力します。
上記のプログラムを実行するには、Node.js環境で次のコマンドを使用します。
node fileName.js.
ここでは、ファイル名をdemo119.jsとして保存しています。
実行結果
プログラムを実行すると、次のような出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo119.js The subject Name=Introduction to Java
このように、map()メソッドとtypeofを組み合わせれば、配列内の一部の要素にしか存在しないネストされたプロパティにも、エラーを発生させることなく安全にアクセスできます。APIレスポンスなど、データ構造が不定なJSONを扱う際に特に役立つテクニックなので、ぜひ覚えておきましょう。
-
JavaScriptでプロパティにアクセスする3つの方法|ドット記法・角括弧・分割代入の使い分け
JavaScriptでオブジェクトのプロパティにアクセスする3つの方法 JavaScriptには、オブジェクトが持つプロパティ(キーと値のペア)を参照するための方法が主に3つあります。どれも同じ値を取得できますが、それぞれ特徴や向いている場面が異なるため、正しく使い分けられるとコードの可読性と保守性が大きく向上します。 ドット記法:object.property 角括弧記法:object[property] 分割代入:let {property} = object 1. ドット記法(object.property) 最もシンプルで読みやすい記法です。obj.a のようにピリオドでつなぐだけ
-
JavaScriptでオブジェクトにreduceメソッドを適用する方法
JavaScriptのreduce()メソッドは本来配列向けのメソッドのため、オブジェクトにそのまま適用することはできません。そこで、Object.values()メソッドを使ってオブジェクトの値を配列として取り出し、その配列に対してreduce()を適用します。 以下は、JavaScriptでオブジェクトの値にreduceメソッドを適用するコード例です。 コード例 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8 /> <meta name=viewport content