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

如何在javascript中每次单击时在数组内创建子对象

如何在javascript中每次单击时在数组内创建子对象,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我想在每次单击按钮时将对象作为现有最后一个对象的子对象插入 这是我的代码: const Myarray = [ { id: 1, child:[] } ] handleArrayDepth = (Myarray) => { Myarray.map(arrayitem => { let id = arrayitem.id; id++; arrayitem.child.push({ id: id, c

我想在每次单击按钮时将对象作为现有最后一个对象的子对象插入

这是我的代码:

const Myarray = [
    { id: 1, child:[] }
]

handleArrayDepth = (Myarray) => {

    Myarray.map(arrayitem => {
      let id = arrayitem.id;
      id++;
      arrayitem.child.push({
        id: id,
        child: []
      });
      if (id < 2) {
        this.handleArrayDepth(arrayitem.child);
      }
    });
};
console.log(Myarray);
如果我点击按钮两次,我会得到如下输出:

0:{
  id: 1,
  child: [
    0:{
      id: 2,
      child: []
    },
    1:{
      id: 3,
      child: []
    }
  ]
}
但我想要的东西如下:

0:{
  id: 1,
  child: [
    0:{
      id: 2,
      child: [
        0:{
          id: 3,
          child: []
        }
      ]
    }
  ]
}
每次单击都应该以递归/无限的方式进行。我找不到有效的方法来做这件事。

有些问题

  • 不要将
    数组
    用作变量名
  • 在不从映射返回值或不改变值时,不要使用映射
  • array.id
    没有意义,因为原始代码中没有任何名为
    array
    的变量
您可以稍微修改您的代码,如果子长度大于0,则进行递归调用,否则按下该值

const数组=[{id:1,子项:[]]
handleArrayDepth=(arr)=>{
arr.forEach({id,child})=>{
id++;
if(子长度){
手感深度(儿童);
}否则{
push({id:id,child:[]});
}
});
};
handleArrayDepth(阵列)
handleArrayDepth(阵列)

console.log(数组)只使用一个持久变量引用最后插入的对象可能更容易:

const数组=[{
id:1,
儿童:[]
}];
设lastParent=array[0];
常量handleArrayDepth=()=>{
const{id,child}=lastParent;
lastParent={id:id+1,子项:[]};
推送(最后一个父对象);
};
handleArrayDepth();
handleArrayDepth();

console.log(数组)改用闭包函数怎么样

const data=[];
常量handlearyDepth=(函数(){
设id=1;
返回函数(arr){
如果(!arr.length){
arr.push({id:id,子项:[]});
}否则{
id=arr[0]。id+1;
handleArrayDepth(arr[0]。子对象);
}
}
})();
函数handleClick(){
const ul=document.getElementById(“列表”);
让item=document.createElement(“li”);
手感深度(数据);
item.innerHTML=JSON.stringify(数据);
ul.附件(项目);
}
document.getElementById(“handler”).addEventListener(“单击”,handleClick)
ul{
列表样式类型:无;
保证金:0;
填充:0;
}
ulli{
填充:10px 10px;
边框:1px实心#ccc;
保证金:5px0;
边界半径:4px;
}
点击我!

你究竟为什么要重新定义阵列?您将如何创建一个
新数组
或检查
数组.isArray
数组
应该是
数组项目
我刚刚发布了一个我的代码说明。这不是一个精确的代码。您好,非常感谢您的回答!但是
const数组本身可以有更多的对象。因此,在这些情况下使用
array[0]
可能需要另一个
array
循环。
0:{
  id: 1,
  child: [
    0:{
      id: 2,
      child: [
        0:{
          id: 3,
          child: []
        }
      ]
    }
  ]
}