海绵宝宝撒
下面一段程序供参考, 层级多深都能支持。解释下这里用for不用forEach的原因,for在当前循环判断生效后,往arr添加后面添加子项,并会影响到下次循环,而forEach则不然。本来for的这个特性是个缺陷,ES5 forEach的出现也是为了弥补这个缺陷,但是事无绝对,用得好就是优势。for(let item of arr) { if(item.children) { arr = arr.concat(item.children); delete item.children }}console.log(arr);如果要求保持顺序, 下面代码参考下for(let i=0; i < arr.length ; i++) { if(arr[i].children) { arr = arr.slice(0,i+1).concat(arr[i].children,arr.slice(i+1)) delete arr[i].children }}console.log(arr);PS:能用循环解决的问题,就不要用递归,如果层次太深,内存吃不消不说,还有可能调用栈溢出,程序崩溃。由于题主是图片, 测试代码我也贴一下吧:let arr = [ { a:1, b:2, c:3, children: [ { id:1, a: 1-1, b: 1-2, c: 1-3 }, { id: 2, a: 1-1, b: 1-2, c: 1-3, children: [ { id:3, a: 1-1, b: 1-2, c: 1-3, children: [ { id: 4, a: 1-1, b: 1-2, c: 1-3 } ] } ] } ] }, { a: 2-1, b: 2-2, children: [] }]