我有一个对象
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**} } } };
答案 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 );
复制此代码并尝试了解其工作原理。希望它有所帮助。