1 /* 2 * 將json字符串更改為layui.tree所用的數據結構類型,輸出仍然為json字符串 3 * tanghao 7.29 4 */ 5 6 function dataToTreeData(oData_str) { 7 8 //將傳遞進來的json字符串轉換成js對象 9 var oData = JSON.parse(oData_str); 10 11 //----------操作節點(父節點)元素獲取---------- 12 13 //獲取原始數據中操作要求的名稱,去除重復,將其保存至目標數組 14 var operationIdArr = new Array(); 15 16 for(i in oData) { 17 //使用e來記錄比較的情況 18 var e = 0; 19 //將本次原始數據中的元素與目標數組中的所有元素比較,只要出現相等的情況就改變e的值 20 for ( j in operationIdArr) { 21 if (oData[i].operationId == operationIdArr[j]) { 22 e++; 23 } 24 } 25 //如果e的值沒有發生改變就說明沒有相同的元素,那么執行插入操作 26 if( e == 0) { 27 operationIdArr.push(oData[i].operationId); 28 } 29 } 30 31 //遍歷操作節點數組 32 /* for(i in operationIdArr) { 33 console.log("父節點數組中的元素為" + operationIdArr[i]); 34 }*/ 35 36 //----------操作節點元素獲取結束---------- 37 38 //兩個節點的數據形式 39 var operationNodeArr = []; 40 41 function operationNode(id, name, children) { 42 this.id = id; 43 this.name = name; 44 this.children = children; 45 } 46 47 function fileNode(id, name, path, operationId) { 48 this.id = id; 49 this.name = name; 50 this.path = path; 51 this.operationId = operationId; 52 } 53 54 //創建節點 55 for(i in operationIdArr) { 56 var operationId = operationIdArr[i]; 57 var operationName; 58 var fileNodeArr = []; 59 for(j in oData) { 60 if ( operationId == oData[j].operationId) { 61 //如果操作節點id相同,添加數據到文件節點 62 fileNodeArr.push(new fileNode(oData[j].id, oData[j].name, oData[j].path, oData[j].operationId)); 63 operationName = oData[j].operationName; 64 } 65 } 66 //添加數據到操作節點 67 operationNodeArr.push(new operationNode(operationId, operationName, fileNodeArr)); 68 } 69 70 //返回json字符串 71 return JSON.stringify(operationNodeArr); 72 }