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

时间:2012-01-30 11:24:11

标签: 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: { j: {k: z} } } }; 

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

1 个答案:

答案 0 :(得分:2)

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 );

复制此代码并尝试了解其工作原理。希望它有所帮助。