树转数组,两种方式递归循环(注意循环不能用iterator方法,只能用for循环)js版/***array*/letarr=[{name:"李四",id:2,pid:0},//[]{name:"王舞",id:3,pid:0},//[]{name:"赵六",id:4,pid:3},//[]{name:"墨流",id:9,pid:3},//[]{name:"张三",id:7,pid:9},//[]{name:"张武",id:10,pid:4},//[]]/***数组转树,递归模式*@paramarr*@parampid*@returns{*[]}*@constructor*/functionArrayToTree(arr,pid=0){//判断arr是否为数组if(!Array.isArray(arr)||!arr.length)return[]letnewArr=[]arr.forEach(v=>{//判断是否为数组pid如果相同就插入进去,递归children,有值就继续递归,没有值就返回[]if(v.pid==pid){newArr.push({...v,children:ArrayToTree(arr,v.id)})}})//返回值returnnewArr}lettree=ArrayToTree(arr)/***树转数组,循环方式,增加循环变量每次*[注意:]只能使用for循环,不能使用es6迭代器*@paramtree*@returns{{length}|*}*@constructor*/functiononTreeToArrayFor(tree){if(!Array.isArray(tree)||!tree.length)thrownewError("Pleasepassinanarray")for(leti=0;i{//每个tree的元素放入res里面res.push(v)if(v.children){//如果有children,递归返回children数据,依次放入resres.push(...TreeToArray(v.children))}})returnres}goVersionpackagemainimport"fmt"//ListstructuretypeListstruct{Namestring`json:"name"`Idint`json:"id"`Pidint`json:"pid"`Children[]List`json:"children"`}//数据vardata=[]List{{Name:"LiSi",Id:2,Pid:0},//[]{Name:"King五",id:3,Pid:0},//[]{Name:"赵六",Id:4,Pid:3},//[]{Name:"莫六",Id:9,Pid:3},//[]{Name:"张三",Id:7,Pid:9},//[]{Name:"张武",Id:10,Pid:4},//[]}/***递归模式,数组转树*@paramarr目标数组*@parampid第一层目标id*@returns{*[]}树*@constructor*/funcArrayToTrees(arr[]List,pidint)[]List{varnewArr[]Listfor_,v:=rangearr{//检查pid是否相同然后插入,递归children,有值继续递归,没有则返回value[]ifv.Pid==pid{v.Children=ArrayToTrees(arr,v.Id)newArr=append(newArr,v)}}returnnewArr}/***树到数组,递归模式*@paramtree*@returns{*[]}*@constructor*/funcArrayToTree(tree[]List)[]List{varres[]Listfor_,list:=rangetree{//tree的每个元素放入resres=append(res,list)iflist.Children!=nil{//如果有children,则递归返回children数据,依次放入res中。res=append(res,ArrayToTree(list.Children)...)}}returnres}/***树转数组,循环方式,每次增加循环变量*[注:]只能使用for循环,es6不能使用迭代器*@paramtree*@returns{{length}|*}*@constructor*/funcTreeToArrayFor(tree[]List)[]List{fori:=0;我