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,您可能会发现这更容易理解谢谢您的编辑!以前我和一个对我进行深入解释的人交谈过,但现在我知道了两种方法!先生,你帮了我很多忙!