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 }