编写个html文件,代码如下:
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO </TITLE> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </HEAD> <BODY> <script type="text/javascript"> nodelist= [ { id:1, pId:0, name:"父节点1 "}, { id:11, pId:1, name:"父节点11 "}, { id:111, pId:11, name:"叶子节点111"}, { id:112, pId:11, name:"叶子节点112"}, { id:113, pId:11, name:"叶子节点113"}, { id:114, pId:11, name:"叶子节点114"}, { id:12, pId:1, name:"父节点12"}, { id:121, pId:12, name:"叶子节点121"}, { id:122, pId:12, name:"叶子节点122"}, { id:123, pId:12, name:"叶子节点123"}, { id:124, pId:12, name:"叶子节点124"}, { id:13, pId:1, name:"父节点13 "}, { id:2, pId:0, name:"父节点2"}, { id:21, pId:2, name:"父节点21"}, { id:211, pId:21, name:"叶子节点211"}, { id:212, pId:21, name:"叶子节点212"}, { id:213, pId:21, name:"叶子节点213"}, { id:214, pId:21, name:"叶子节点214"}, { id:22, pId:2, name:"父节点22 "}, { id:221, pId:22, name:"叶子节点221"}, { id:222, pId:22, name:"叶子节点222"}, { id:223, pId:22, name:"叶子节点223"}, { id:224, pId:22, name:"叶子节点224"}, { id:23, pId:2, name:"父节点23"}, { id:231, pId:23, name:"叶子节点231"}, { id:232, pId:23, name:"叶子节点232"}, { id:233, pId:23, name:"叶子节点233"}, { id:234, pId:23, name:"叶子节点234"}, { id:3, pId:0, name:"父节点3 "} ]; var key='id',parentKey='pId',childKey='children'; //具体方法 function reconstruction(sNodes){ var r = []; var tmpMap = {}; //先把数组整理成map的形式 for (i = 0, l = sNodes.length; i < l; i++) { // key为 对象的"id"的值, value就是就该对象 tmpMap[sNodes[i][key]] = sNodes[i]; } //遍历,组织成子孙节点 for (i = 0, l = sNodes.length; i < l; i++) { //查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中 if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) { if (!tmpMap[sNodes[i][parentKey]][childKey]) tmpMap[sNodes[i][parentKey]][childKey] = []; tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]); } else { //如果不存在就直接放入到一个新的列表中 r.push(sNodes[i]); } } return r; } console.log(reconstruction(nodelist)) </script> </BODY> </HTML>