1.用parentId的数据格式转换成有children的数据

vararray=[];variterator1=function(treeNodes){if(!treeNodes||!treeNodes.length)return;varparent,i=0,obj={};while(i<treeNodes.length){node=treeNodes[i++];obj[node.id]=node;if(node.parentId){parent=obj[node.parentId];if(parent.children){node["parIndex"]=parent.parIndex+"."+(parent.children.length+1);node.cell[0]=node["parIndex"];parent.children.push(node);}else{node["parIndex"]=parent.parIndex+"."+1;node.cell[0]=node["parIndex"];parent.children=[node];}}else{node["parIndex"]=1;array.push(node);}}returnarray;};console.log('-------------递归------------------');iterator1(treeNodes);

2.将有children的数据拆成平级对象(非递归深度优先)(1 1.1 1.2 2 ...)

vararray1=[];variterator2=function(treeNodes){varstack=[];if(!treeNodes||!treeNodes.length)return;//先将第一层节点放入栈for(vari=0,len=treeNodes.length;i<len;i++){stack.push(treeNodes[i]);}varitem;while(stack.length){item=stack.shift();console.log(item.id);//如果该节点有子节点,继续添加进入栈顶if(item.children&&item.children.length){stack=item.children.concat(stack);}deleteitem.children;deleteitem.parIndex;array1.push(item);}};console.log('-------------非递归深度优先实现------------------');iterator2(array);

3.非递归广度优先(1 2 1.1 1.2 ...)

//非递归广度优先实现variterator1=function(treeNodes){varstack=[];if(!treeNodes||!treeNodes.length)return;//先将第一层节点放入栈for(vari=0,len=treeNodes.length;i<len;i++){stack.push(treeNodes[i]);}varitem;while(stack.length){item=stack.shift();console.log(item.id);//如果该节点有子节点,继续添加进入栈底if(item.children&&item.children.length){stack=stack.concat(item.children);}}};console.log('-------------非递归广度优先实现------------------');iterator1(treeNodes);