重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.用parentId的数据格式转换成有children的数据
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、内丘网站维护、网站推广。
var array = []; var iterator1 = function (treeNodes) { if (!treeNodes || !treeNodes.length) return; var parent,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); } } return array; }; console.log('------------- 递归 ------------------'); iterator1(treeNodes);
2.将有children的数据拆成平级对象(非递归深度优先)(1 1.1 1.2 2 ...)
var array1 = []; var iterator2 = function (treeNodes) { var stack = []; if (!treeNodes || !treeNodes.length) return; //先将第一层节点放入栈 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } var item; while (stack.length) { item = stack.shift(); console.log(item.id); //如果该节点有子节点,继续添加进入栈顶 if (item.children && item.children.length) { stack = item.children.concat(stack); } delete item.children; delete item.parIndex; array1.push(item); } }; console.log('------------- 非递归深度优先实现 ------------------'); iterator2(array);
3.非递归广度优先(1 2 1.1 1.2 ...)
//非递归广度优先实现 var iterator1 = function (treeNodes) { var stack = []; if (!treeNodes || !treeNodes.length) return; //先将第一层节点放入栈 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } var item; 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);