Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于动态键列表设置嵌套数组元素的值?_Javascript_Arrays_Recursion_Javascript Objects - Fatal编程技术网

Javascript 基于动态键列表设置嵌套数组元素的值?

Javascript 基于动态键列表设置嵌套数组元素的值?,javascript,arrays,recursion,javascript-objects,Javascript,Arrays,Recursion,Javascript Objects,我有一个这样的动态生成的对象(我只是为了显示而注意这里的“children”数组键,假设它是一个语法上合理的数组): 然后,我将生成一个密钥列表: var keys = [0,3,6]; 我需要设置由键列表描述的数组元素的值,如下所示: foo.children[0].children[3].children[6] = "bar"; 有什么想法吗?我尝试了几种不同的递归技术,但我遗漏了一些地方。虽然可以递归地执行此操作,但我认为在这样的循环中执行此操作更有效: function setNes

我有一个这样的动态生成的对象(我只是为了显示而注意这里的“children”数组键,假设它是一个语法上合理的数组):

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

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
}
def函数getElement(键){
var el=this.foo
对于(i=0;i
  • 这个函数只是检索所需的元素,实际上并没有设置值
    • 这个怎么样

      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];
          }   
      }
      

      你能创建一个函数来接受keys数组作为参数,循环每个键并将其附加到点符号上吗?事实上,我在几个小时后解决了自己的问题,但这与我所做的是一样的(只是使用for循环而不是forEach),所以谢谢!
      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];
          }   
      }