2016-06-16 2 views
1

文字列を使用して、JavaScriptオブジェクトへのアクセス - それは文字列として付属しています...今すぐ</p> <pre><code>var objectOne = { settings: { name: "object one" } } var objectTwo = { settings: { name: "object two" } } </code></pre> <p>のは、私がURL内のパラメータから<code>object</code>を得たふりをしましょう...私はいくつかの簡単なオブジェクトが定義されている

var obj = "objectTwo"; 

このobj変数を使用してobjectTwo.settingsにアクセスするにはどうすればよいですか?

objが文字列であるので、私は以下を行うことはできません。

var settings1 = obj.settings; 
var settings2 = [obj].settings; // also doesn't work 

私は運なしに引用符を除去しようとしました。

文字列を使用してトップレベルオブジェクトにアクセスするにはどうすればよいですか?

+4

で働いsetNestedValue()双子です。 – Quantastical

+1

^それについてです。文字列を使って変数にアクセスする他の唯一の方法は、 'eval'を使用していますが、それを行うのは正当な理由はほとんどありません。 –

+0

私は 'ウインドウ 'を忘れているとは思わない。ハハ。とても簡単。ありがとうございました! – dmathisen

答えて

1

グローバル名前空間にある場合は、window[obj].settingsを使用できます。

もしそうでなければ、めったにお勧めできないコメントの中で@MikeCが言及したようにevalを除いてできることはあまりありません。

2

windowはきちんとしたトリックですが、データの構造を変更する可能性はありますか?

var objects = { 
    objectOne: { 
    settings: { 
     name: "object one" 
    } 
    }, 
    objectTwo: { 
    settings: { 
     name: "object two" 
    } 
    } 
} 

var id = "objectOne"; 
alert(objects[id].settings.name); 
1

オブジェクトプロパティを動的にアクセスするObjectメソッドを考案しましょう。 Object.prototype.getNestedValue()あなたの財産がどこにあるかにかかわらず、それは一連の議論を順番にとり、あなたにとって望ましい価値を得ます。

この特定のケースでは、引数は1つだけです。

Object.prototype.getNestedValue = function(...a) { 
 
    return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]]; 
 
}; 
 
var objects = { 
 
    objectOne: { 
 
    settings: { 
 
     name: "object one" 
 
    } 
 
    }, 
 
    objectTwo: { 
 
    settings: { 
 
     name: "object two" 
 
    } 
 
    } 
 
}, 
 
     obj = "objectTwo"; 
 
    result = objects.getNestedValue(obj); 
 
console.log(JSON.stringify(result));

あなたはgetNestedValue()を見ることができますし、それはあなたが `ウィンドウ[OBJ] .settings`使用できるグローバルな名前空間にある場合、それはhere

+0

私はOPの変数定義を変更してマスターオブジェクトのプロパティにするというあなたの説明を明確にする必要があると思います。 – nnnnnn

関連する問題

 関連する問題