1. ホーム
  2. javascript

[解決済み] ドット記法の文字列を使用してオブジェクトの子プロパティにアクセスする [重複].

2022-05-13 18:09:25

質問

非常に簡単なJavaScriptの問題のようですが、もしかしたら正しい検索キーワードを見逃しているだけかもしれません!一時的に行き詰っています。

あるオブジェクトがあるとします

var r = { a:1, b: {b1:11, b2: 99}};

99にアクセスする方法はいくつかあります。

r.b.b2
r['b']['b2']

私が欲しいのは文字列を定義できることです。

var s = "b.b2";

で99にアクセスし

r.s or r[s] //(which of course won't work)

一つの方法は、ドットで文字列を分割し、多分再帰的/反復的にプロパティを取得するそのための関数を書くことです。しかし、より簡単な/より効率的な方法はありますか?ここにあるjQuery APIのうち、何か便利なものがありますか?

どのように解決するには?

少し前に書いた素朴な関数ですが、基本的なオブジェクトのプロパティに対して動作します。

function getDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

console.log(getDescendantProp(r, "b.b2"));
//-> 99

これを拡張してquot;allow"配列インデックスアクセスを行う回答もありますが、この方法ではドット記法で数値インデックスを指定すればよいので、あまり必要ないでしょう。

getDescendantProp({ a: [ 1, 2, 3 ] }, 'a.2');
//-> 3