0

配列形式の文字列パスのみがわかっているオブジェクトにアクセスしたいと思います。

1.) オブジェクトがあり、どこに

root["obj1"]["obj2"] = 1;

(一般的な場合root["obj1"]...["objN"]

2.) 既知の文字列 objectPath のみを持っています:

var objectPath = 'root["obj1"]["obj2"]'

3.) オブジェクトを読み取るだけでなく、その値を設定する必要があります。

objectPath = 2;
//so root["obj1"]["obj2"] === 2

私が理解しているように

  1. eval() にはいくつかのオプションがあるかもしれませんが、変数ではなく値を取得します。

  2. ルートのすべてのオブジェクトをループし、「root.obj1.obj2」に変換し (「obj1」は簡単に「space1 を含む obj」になる可能性があるため、そうではありません)、指定された文字列が現在のオブジェクトと等しいかどうかを確認できます。ループ。

http://jsfiddle.net/ACsPn/

関連リンク: ドット表記文字列を使用してオブジェクトの子プロパティにアクセスする

4

1 に答える 1

0

私はあなたのために関数を書き、できるだけ美しく再利用できるようにしました:

function setProp(path, newValue, holder) {
    var t = path.split(/[\[\]"]+/).filter(function(v){return v}),
        l = t.pop(), s, o = holder || window;
    while (s = t.shift()) o = o[s];
    o[l] = newValue;
}

次のように使用します。

setProp('root["obj1"]["obj2"]', 2);

ルート オブジェクトがグローバル変数にない場合は、関連するホルダーを 3 番目の引数として渡します。

デモンストレーション (コンソールを開いて、変更されたルート オブジェクトを確認します)

于 2013-05-15T11:56:49.283 に答える