Javascript 基于动态键列表设置嵌套数组元素的值?
我有一个这样的动态生成的对象(我只是为了显示而注意这里的“children”数组键,假设它是一个语法上合理的数组): 然后,我将生成一个密钥列表: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
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];
}
}