let arr = [
{
a: 1,
b: 2,
c: 3,
children: [
{
id: 1,
a: 1-1,
b: 1-2,
c: 1-3,
}
]
},
{
a: 2-1,
b: 2-2,
c: 2-3,
children: []
}
]
要将数据格式变成
同时每个对象添加一个唯一的key值
function getData (arr) {
arr.forEach((item, index) => {
brr.push( Object.assign(item, {key: index}) )
if (item.children) {
getData(item.children)
}
delete item.children;
})
return brr
}
getData(arr)
我写了个提取的方法 children提取出来了,但是原来的children还是存在,而且key值也不是唯一的
下面一段程序供参考, 层级多深都能支持。
解释下这里用for不用forEach的原因,for在当前循环判断生效后,往arr添加后面添加子项,并会影响到下次循环,而forEach则不然。本来for的这个特性是个缺陷,ES5 forEach的出现也是为了弥补这个缺陷,但是事无绝对,用得好就是优势。
如果要求保持顺序, 下面代码参考下
PS:能用循环解决的问题,就不要用递归,如果层次太深,内存吃不消不说,还有可能调用栈溢出,程序崩溃。
由于题主是图片, 测试代码我也贴一下吧: