Javascript 如何动态访问对象,然后编辑其内容
例如,我有这样一个对象:Javascript 如何动态访问对象,然后编辑其内容,javascript,arrays,json,algorithm,object,Javascript,Arrays,Json,Algorithm,Object,例如,我有这样一个对象: let htmlDom = [ { type: "div", att: { class: ["test", "test2"], id: "yoyo", "data-hello": ["jan", "john"], }, content: "Hello&
let htmlDom = [
{
type: "div",
att: {
class: ["test", "test2"],
id: "yoyo",
"data-hello": ["jan", "john"],
},
content: "Hello",
child: [
{
type: "div",
content: "test",
child: [{}],
},
],
},
];
现在我想动态访问它,例如:htmlDom[0].child[0].child[0],现在子对象的数量可以变化,而且通常情况下,子对象的数量也会变化。例如,假设我有一个[0,0,0]数组,那么如何使用数组中的数字动态访问该路径,然后更改最后一个子[0]的内容?例如,数组以后可能会变为[0,2,4,3,6]等等,这取决于我需要创建更多的数组长度。child[]您可以首先使用从索引数组中获取最后一个索引,然后使用现在修改的索引数组在子数组上迭代。通过将累加器设置为起始
htmlDom
,您可以在.reduce()
的每次迭代中访问每个索引处的对象及其子数组,其中返回每个对象的子数组。然后,此子数组将用作reduce方法的下一次调用/迭代的acc
。找到最后一个子数组后,可以使用先前从数组中弹出的索引来设置/更新值:
let htmlDom=[{type:“div”,att:{class:[“test”,“test2”],id:“yoyo”,“data hello:[“jan”,“john”],},content:[{type:“div”,content:“test”,child:[{}],},},},},},];
常量changeByIdxs=(arr,[…idxs],value)=>{
const lastIdx=idxs.pop();
const finalArr=idxs.reduce((acc,i)=>acc[i]。child,arr);
finalArr[lastIdx]=值;
}
changeByIdxs(htmlDom[0,0,0],{x:1});
console.log(htmlDom)代码>您基本上要求使用递归函数来读取或设置子级?到目前为止,您自己是如何解决这个问题的?只需从1循环到n-1,然后访问。child[index]离开第一个索引0我从技术角度看不懂,但我可以给您买杯咖啡吗3-你去研究了吗it@Autumnlight我已经更新了我的答案,使用for循环而不是reduce,您可能会发现这更容易理解谢谢您的编辑!以前我和一个对我进行深入解释的人交谈过,但现在我知道了两种方法!先生,你帮了我很多忙!