您好,登錄后才能下訂單哦!
1.用parentId的數(shù)據(jù)格式轉(zhuǎn)換成有children的數(shù)據(jù)
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的數(shù)據(jù)拆成平級(jí)對(duì)象(非遞歸深度優(yōu)先)(1 1.1 1.2 2 ...)
var array1 = []; var iterator2 = function (treeNodes) { var stack = []; if (!treeNodes || !treeNodes.length) return; //先將第一層節(jié)點(diǎn)放入棧 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); //如果該節(jié)點(diǎn)有子節(jié)點(diǎn),繼續(xù)添加進(jìn)入棧頂 if (item.children && item.children.length) { stack = item.children.concat(stack); } delete item.children; delete item.parIndex; array1.push(item); } }; console.log('------------- 非遞歸深度優(yōu)先實(shí)現(xiàn) ------------------'); iterator2(array);
3.非遞歸廣度優(yōu)先(1 2 1.1 1.2 ...)
//非遞歸廣度優(yōu)先實(shí)現(xiàn) var iterator1 = function (treeNodes) { var stack = []; if (!treeNodes || !treeNodes.length) return; //先將第一層節(jié)點(diǎn)放入棧 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); //如果該節(jié)點(diǎn)有子節(jié)點(diǎn),繼續(xù)添加進(jìn)入棧底 if (item.children && item.children.length) { stack = stack.concat(item.children); } } }; console.log('------------- 非遞歸廣度優(yōu)先實(shí)現(xiàn) ------------------'); iterator1(treeNodes);
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。