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