如何在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
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: []
}
]
}
]
}