根据动态键列表设置嵌套数组元素的值?
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];
}
}
我有一个像这样的动态生成的对象(我只是在这里注意到 '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];
}
}