Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 - Fatal编程技术网

Javascript 更新对象的多维数组的值

Javascript 更新对象的多维数组的值,javascript,Javascript,如果我有数组: var arr = [ { text: "something", child: [ { text: "something child", child: [..] },.. ] },.. ]; 当我有一个索引数组时,有没有更有效的方法可以通过使用for()编辑元素来使用更新的值重建整个数组 var index = [0, 0]; 为此: arr[0]["child"][0]["text"] = "updated value"; 这只

如果我有数组:

var arr = [
 {
  text: "something",
  child: [
   {
    text: "something child",
    child: [..]
   },..
  ]
 },..
];
当我有一个索引数组时,有没有更有效的方法可以通过使用for()编辑元素来使用更新的值重建整个数组

var index = [0, 0];
为此:

arr[0]["child"][0]["text"] = "updated value";
这只是一个小示例,但arr有时为1级深度,有时为12级,等等。我需要更新的值有时为第一级:

arr[0]["text"] = "updated value"

您可能需要一个接受数组、索引和新值作为输入的递归方法。如果索引数组的长度为1,则它会更新数组中的该元素。如果不是,则在索引数组中的第一个元素指定的元素处使用子数组调用该方法,删除第一个元素的索引数组和新值。

一个好的替代方法是使用vanilla
for loop

let arr=[{text:“something”,child:[{text:“something child”,child:[]}]],
索引=[0,0],
电流=未定义;
for(设i=0;i

。作为控制台包装{max height:100%!important;top:0;}
您可以迭代索引并在末尾更新
文本
属性

函数更新(子级、索引、值){
index.reduce((o,i)=>o.child[i],{child}).text=value;
}
var数组=[{text:“something”,子项:[{text:“something child”,子项:[]}];
更新(数组,[0,0],'foo');
console.log(数组)

<代码>。作为控制台包装器{最大高度:100%!重要;顶部:0;} < P>。在我看来,这是相当不可维护的,你应该考虑不同的数据结构。但是,您询问了这种解决方案。您可以使用eval(),它非常有效,即使在没有额外安全检查的情况下对生产环境也是危险的:

var-arr=[{
文字:“某物”,
儿童:[{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[]
}]
}, {
文字:“某个孩子”,
儿童:[]
}]
},
{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[]
}, {
文字:“某个孩子”,
儿童:[]
}]
}
]
}, {
文字:“某物”,
儿童:[{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[]
}]
}, {
文字:“某个孩子”,
儿童:[]
}]
},
{
文字:“某个孩子”,
儿童:[{
文字:“某个孩子”,
儿童:[]
}, {
文字:“某个孩子”,
儿童:[]
}]
}
]
}];
var ind=[0,1,0];
var setsomething=2;
函数setChild(ind){
var ev=“arr”;
对于(变量i=0;isetChild(ind)
第一个示例显示替换
子对象
,而第二个示例显示重新指定子对象的
.text
属性?这两种可能性都存在吗?您的数据结构看起来像一棵树,您应该研究算法,并可能找出最适合您的算法case@CertainPerformance对不起,我的坏消息怎么办?速度记忆?代码行?另外,从
[0,0]
arr[0][“child”][0][“text”]
的规则是什么?例如,如果您得到
[0,0,0]
它是每个索引之间的“子”属性访问器吗?此外,这个问题的答案有很多方法可以实现您的目的: