プログラムで「hello」を「hey」に変更したいのですが、ソリューションはネストされた要素の数に関係なく機能するはずです(単純にするために2つのレベルを使用しています)。
var data = {level1: {level2 : 'hello' }};
「data」変数、パス (「level1/level2」)、および新しい値 (「hey」) にアクセスできます。
私はやろうとしました:
var parents = 'level1/level2'.split('/');
var target = data;
for(var i=0; i<parents.length; i++){
target = data[parents[i]];
}
target = 'hey';
アイデアは、ルートに移動することでした
target = data
次に 1 レベルの深さ
target = data['level1']
...立ち止まるな
target = data['level1']['level2'] //data['level1'] === target
そして内容を修正
target = 'hey'
しかし、(target = target['level2']) を実行すると、元のオブジェクト (データ) への参照が失われるように見えます。
パスを使用して文字列を作成し、それを評価できると思います。
eval("data['level1']['level2']='hey');
eval() を含まないより良い解決策はありますか?