buildTreeData.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * Created by vian on 2017/3/24.
  3. */
  4. var myTree = {
  5. getTop: function(data, topId){
  6. var top = [];
  7. for(var i=0; i<data.length; i++){
  8. if(data[i].ParentID == -1 ||data[i].ParentID == topId){
  9. top.push(data[i]);
  10. }
  11. }
  12. return top;
  13. },
  14. sortNodes: function(nodes){
  15. for(var i=0; i<nodes.length; i++){
  16. for(var j=i+1; j<nodes.length; j++){
  17. var temp;
  18. if(nodes[i].NextSiblingID == nodes[j].ID){
  19. temp = nodes[i+1];
  20. nodes[i+1] = nodes[j];
  21. nodes[j] = temp;
  22. }
  23. }
  24. if(nodes[i].NextSiblingID == nodes[0].ID){
  25. var topNode = nodes[i];
  26. for(var j=nodes.length-2; j>=0; j-- ){
  27. nodes[j+1] = nodes[j];
  28. }
  29. nodes[0] = topNode;
  30. }
  31. }
  32. return nodes;
  33. },
  34. getNodes: function(data ,ids){
  35. var idsNodes = [];
  36. for(var i =0; i<ids.length; i++){
  37. for(var j=0 ; j<data.length; j++){
  38. if(ids[i] == data[j].ID){
  39. idsNodes.push({ID: data[j].ID, ParentID: data[j].ParentID, NextSiblingID: data[j].NextSiblingID, children: data[j].children});
  40. }
  41. }
  42. }
  43. return idsNodes;
  44. },
  45. getNodeChildren: function(node, children){
  46. for(var i=0; i<billsData.length; i++){
  47. if(billsData[i].ParentID == node.ID){
  48. children.push(billsData[i].ID);
  49. myTree.getNodeChildren(billsData[i], children);
  50. }
  51. }
  52. return children;
  53. },
  54. buildChildren: function(billsData){
  55. var tempTree = [];
  56. for(var i=0; i<billsData.length; i++){
  57. var children = [];
  58. myTree.getNodeChildren(billsData[i], children);
  59. tempTree.push({"ID": billsData[i].ID, "ParentID": billsData[i].ParentID, "NextSiblingID": billsData[i].NextSiblingID, "children": children});
  60. }
  61. return tempTree;
  62. },
  63. buildTree: function(treeContainer, billsData, tempTree, topId){
  64. var sortTempTree = myTree.sortNodes(getTop(tempTree, topId));
  65. for(var i=0; i<sortTempTree.length; i++){
  66. if(sortTempTree[i].children.length > 0){
  67. treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
  68. var childrenTree = myTree.getNodes(myTree.buildChildren(billsData), sortTempTree[i].children);
  69. myTree.buildTree(treeContainer, billsData, childrenTree, sortTempTree[i].ID);
  70. }
  71. else {
  72. treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
  73. }
  74. }
  75. return treeContainer;
  76. }
  77. }