/** * Created by vian on 2017/3/31. */ var test = require("tape"); test("testMyBillsTree:", function(t){ var billsData = [ {ID: 2, ParentID: -1, NextSiblingID: 3}, {ID: 1, ParentID: -1, NextSiblingID: 2}, {ID: 3, ParentID: -1, NextSiblingID: 9}, {ID: 4, ParentID: 3, NextSiblingID: 5}, {ID: 5, ParentID: 3, NextSiblingID: -1}, {ID: 6, ParentID: 4, NextSiblingID: 7}, {ID: 7, ParentID: 4, NextSiblingID: -1}, {ID: 8, ParentID: 6, NextSiblingID: -1}, {ID: 10, ParentID: -1, NextSiblingID: -1}, {ID: 9, ParentID: -1, NextSiblingID: 10}, {ID: 11, ParentID: 10, NextSiblingID: -1}, {ID: 12, ParentID: 11, NextSiblingID: -1}, {ID: 13, ParentID: 12, NextSiblingID: -1}, {ID: 14, ParentID: 13, NextSiblingID: -1}, {ID: 15, ParentID: 14, NextSiblingID: 16}, {ID: 16, ParentID: 14, NextSiblingID: 17}, {ID: 17, ParentID: 14, NextSiblingID: -1}, {ID: 18, ParentID: 17, NextSiblingID: 19}, {ID: 19, ParentID: 17, NextSiblingID: -1}, {ID: 20, ParentID: 1, NextSiblingID: -1}, ] function getTop(data, topId){ var top = []; for(var i=0; i=0; j-- ){ nodes[j+1] = nodes[j]; } nodes[0] = topNode; } } return nodes; } function getNodeChildren(node, children){ for(var i=0; i 0){ treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children}); var childrenTree = getNodes(buildChildren(billsData), sortTempTree[i].children); buildTree(treeContainer, billsData, childrenTree, sortTempTree[i].ID); } else { treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children}); } } return treeContainer; } //console.log("sortNodes:===================="); //console.log(sortNodes(getTop(buildChildren(billsData)))); // console.log("buildChildren:===================="); // console.log(buildChildren(billsData)); console.log("buildTree:===================="); var billsTree = []; console.log(buildTree(billsTree, billsData, buildChildren(billsData), -1)); t.end(); });