treeDataHelper.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * Created by Tony on 2017/1/23.
  3. */
  4. var tree_Data_Helper = {
  5. sortDataBySerial: function (data) {
  6. data.sort(function(item1, item2) {
  7. var rst = 0;
  8. if (item1["SerialNo"] > item2["SerialNo"]) {
  9. rst = 1;
  10. } else if (item1["SerialNo"] < item2["SerialNo"]) {
  11. rst = -1;
  12. }
  13. return rst;
  14. });
  15. },
  16. buildTreeData: function (data) {
  17. var rst = [], idArr = [], me = this;
  18. var distIdx = -1, distinctIdx = 0;
  19. for (var i = 0; i < data.length; i++) {
  20. idArr.push(i);
  21. }
  22. me.distinctByCustId(data, idArr, "ParentID", distIdx);
  23. distinctIdx = me.getDistinctId(data, idArr, distIdx);
  24. for (var i = 0; i < distinctIdx; i++) {
  25. rst[i] = data[idArr[i]];
  26. }
  27. for (var i = 0; i < rst.length; i++) {
  28. idArr = idArr.slice(distinctIdx);
  29. me.buildBranchData(rst[i], data, idArr);
  30. }
  31. return rst;
  32. },
  33. getDistinctId: function (data, idArr, compareVal) {
  34. var rst = 0, me = this;
  35. for (var i = 0; i < idArr.length; i++) {
  36. if (data[idArr[i]]["ParentID"] != compareVal) {
  37. rst = i;
  38. break;
  39. }
  40. }
  41. return rst;
  42. },
  43. buildBranchData: function (parentItem, orgData, idArr) {
  44. var distinctIdx = 0, distVal = parentItem["ID"], me = this;
  45. me.distinctByCustId(orgData, idArr, "ParentID", distVal);
  46. distinctIdx = me.getDistinctId(orgData, idArr, distVal);
  47. parentItem["items"] = [];
  48. for (var i = 0; i < distinctIdx; i++) {
  49. parentItem["items"][i] = orgData[idArr[i]];
  50. }
  51. for (var i = 0; i < parentItem["items"].length; i++) {
  52. idArr = idArr.slice(distinctIdx);
  53. me.buildBranchData(parentItem["items"][i], orgData, idArr);
  54. distinctIdx = me.getDistinctId(orgData, idArr, parentItem["items"][i]["ID"]);
  55. }
  56. },
  57. distinctByCustId: function (data, idArray, IdStr, IdVal) {
  58. idArray.sort(function(idx1, idx2) {
  59. var rst = 0;
  60. if (data[idx1][IdStr] == IdVal) {
  61. if (data[idx2][IdStr] == data[idx1][IdStr]) {
  62. if (data[idx1]["SerialNo"] > data[idx2]["SerialNo"]) {
  63. rst = 1;
  64. } else {
  65. rst = -1;
  66. }
  67. } else {
  68. rst = -1;
  69. }
  70. } else if (data[idx2][IdStr] == IdVal) {
  71. rst = 1;
  72. }
  73. return rst;
  74. });
  75. }
  76. }