установить правильность вложенного объекта динамическим массивом - PullRequest
2 голосов
/ 30 января 2012

У меня есть объект

 obj = { a: 1, b: { c: 1,  g: x, h: { j: {k: z} } } }; 

, если у меня есть массив динамической длины ["a", "b", [...], "g"]

Какя могу теперь обновить abcg?

пример:

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 Ответ

2 голосов
/ 30 января 2012
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 );

Скопируйте этот код и попытайтесь понять, как он работает.Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...