Arrays 通过动态数组设置嵌套对象属性

Arrays 通过动态数组设置嵌套对象属性,arrays,actionscript-3,object,Arrays,Actionscript 3,Object,我有一个目标 obj = { a: 1, b: { c: 1, g: x, h: { j: {k: z} } } }; 如果我有一个动态长度的数组[“a”,“b”,“[…],“g”] 我现在如何更新a.b.c.g 例如: function set($target, $new_value, $array){ //magic } set(obj, y, ['b', 'g']); // obj is now { a: 1, b: { c: 1, [...] g: **y**, h:

我有一个目标

 obj = { a: 1, b: { c: 1,  g: x, h: { j: {k: z} } } }; 
如果我有一个动态长度的数组[“a”,“b”,“[…],“g”]

我现在如何更新a.b.c.g

例如:

function set($target, $new_value, $array){
    //magic
} 

set(obj, y, ['b', 'g']);
// obj is now { a: 1, b: { c: 1, [...] g: **y**, h: { j: {k: z} } } }; 

set(obj, y, ['b', 'h', 'j', 'k']);
// obj is now { a: 1, b: { c: 1, [...] g: y, h: { j: {k: **y**} } } };
函数setObj(目标:对象,新值:对象,路径:数组):void{
对于(变量i:uint=0;i
复制此代码并尝试了解其工作原理。希望有帮助。

函数集($obj,$val,$arr){for(var i:uint=0;i<$arr.length-1;i++){$obj=$obj[$arr[i]];}$obj[$arr.pop()]=$val;}
function setObj(target:Object, newValue:Object, path:Array):void {
  for ( var i:uint = 0; i < path.length-1; i++ ) {
    target = target[path[i]];
    if ( target == null ) return;
  }
  target[path[path.length-1]] = newValue;
}

var o:Object = {a: 1, b: { d: 42, e: {f: 7, g: 8}}, c: 3};
trace( o.b.e.f );
setObj(o, "bla", ["b", "e", "f"]);
setObj(o, "42", ["a"]);
trace( o.b.e.f );
trace( o.b.e.g );
trace( o.a );