はじめに
この実験では、JavaScript で与えられたパス文字列を使用してネストされたオブジェクトのプロパティを取得する方法を探ります。map()、filter()、reduce() などのさまざまな配列メソッドを使用して、複雑なオブジェクトから特定の値を抽出する方法を学びます。このスキルは、大規模なデータセットやネストされた JSON オブジェクトを返す API を扱う際に不可欠です。
パス文字列からネストされたオブジェクトのプロパティを取得する方法
コーディングの練習をするには、ターミナル/SSH を開き、node と入力します。
次の関数は、パス文字列で指定されたセレクタを使用して、オブジェクトから一連のプロパティを取得します。これを実現するには、次の手順に従います。
Array.prototype.map()を使用して各セレクタを反復処理し、String.prototype.replace()を適用して角括弧をドットに置き換えます。String.prototype.split()を使用して各セレクタを文字列の配列に分割します。Array.prototype.filter()を使用して空の値を削除します。Array.prototype.reduce()を使用して各セレクタで示される値を取得します。
これが関数です。
const get = (from, ...selectors) =>
[...selectors].map((s) =>
s
.replace(/\[([^\[\]]*)\]/g, ".$1.")
.split(".")
.filter((t) => t !== "")
.reduce((prev, cur) => prev && prev[cur], from)
);
この関数を使用して、パス文字列でネストされたオブジェクトから値を取得することができます。次に例を示します。
const obj = {
selector: { to: { val: "val to select" } },
target: [1, 2, { a: "test" }]
};
get(obj, "selector.to.val", "target[0]", "target[2].a");
// ['val to select', 1, 'test']
まとめ
おめでとうございます!「パス文字列からネストされたオブジェクトのプロパティを取得する」実験を完了しました。LabEx でさらに多くの実験を行い、スキルを向上させることができます。