根据动态键列表设置嵌套数组元素的值?

Setting the value of a nested array element based on a dynamic list of keys?

我有一个像这样的动态生成的对象(我只是在这里注意到 'children' 数组键用于显示目的,假设它是一个语法合理的数组):

foo: {
    children: [
        0: {
            children: [
               3: { 
                   children: [
                       6: {
                           //...etc

然后我生成了一个密钥列表:

var keys = [0,3,6];

并且我需要设置键列表描述的数组元素的值,如下所示:

foo.children[0].children[3].children[6] = "bar";

有什么想法吗?我尝试了几种不同的递归技术,但我在某处遗漏了一些东西。

虽然您可以递归地执行此操作,但我认为在这样的循环中执行此操作更有效:

function setNestedChild( obj, path, value ){
    var child = obj;
    path.forEach(function( i, idx ){
        if( idx == path.length - 1 ){
            child.children[ i ] = value;
        }
        else {
            child = child.children[ i ];
        }
    });
}

按照

的方法怎么样
def function getElement (keys) {
  var el = this.foo

  for (i = 0; i < keys.length; i++) {
    el = el.children[keys[i]]
  }

  return el
}
  • 此函数只是检索所需的元素,实际上并没有设置值。

这个怎么样?

function setVal(obj, keys, val){
    var temp = obj;
    while(keys.length){
        var i = keys.pop();
        if(!keys.length) return temp.children[i] = val;
        temp = temp.children[i];
    }   
}