JS 中 :
var znodes = [{id: 0, pid: -1, имя: "aaaa"}, {id: 1, pid: 0, name: "a"}, {id: 11, pid: 1, name: "a1"}, {id: 12, pid: 1, "a2"}, {id: 13, pid: 1, name: "A3", "A2", {id: 13, pid: 1, "A3" {id: 2, pid: 0, name: "b"}, {id: 21, pid: 2, name: "b1"}, {id: 22, pid: 2, имя: "b2"}, {id: 23, pid: 2, имя: "b3"}, {id: 3, pid: 0, "c"}, {id: 3, pid: ". {id: 32, pid: 3, name: "c2"}, {id: 33, pid: 3, name: "c3"}, {id: 34, pid: 31, имя: "x"}, {id: 35, pid: 31, имя: "y"}, {id: 36, pid: 31, z " {id: 37, pid: 36, имя: "z1123"}, {id: 38, pid: 37, name: "z123123123"}]; function treeMenu (a) {this.tree = a || []; this.groups = {};}; treemenu.prototype = {init: function (pid) {this.group (); вернуть это. Getdom (this.groups [pid]); }, группа: function () {for (var i = 0; i <this.tree.length; i ++) {if (this.groups [this.tree [i] .pid]) {this.groups [this.tree [i] .pid] .push (this.tree [i]); } else {this.groups [this.tree [i] .pid] = []; this.groups [this.tree [i] .pid] .push (this.tree [i]); }}}, getDom: function (a) {if (! a) {return ''} var html = '/n <ul>/n'; for (var i = 0; i <a.length; i ++) {html+= '<li> <a href = "#">'+a [i] .name+'</a>'; html+= this.getdom (this.groups [a [i] .id]); html+= '</li>/n'; }; html+= '</ul>/n'; вернуть HTML; }}; var html = new TreeMenu (Znodes) .init (0); Alert (html);Java:
Пакет -тест; импорт java.util.arraylist; import java.util.comparator; import java.util.hashmap; import java.util.iterator; import java.util.list; import java.util.map; import java.util.set; импорт java.util.collections;/***** args) {// 读取层次数据结果集列表 List Datalist = virtualDatagenerator.getVirtualResult (); // 节点列表 (散列表 , 用于临时存储节点对象) Hashmap nodelist = new Hashmap (); // 根节点 node root = null; // 根据结果集构造节点列表 (存入散列表 存入散列表) для (итератор it = datalist.iterator (); it.hasnext ();) {map dataRecord = (map) it.next (); Node node = new Node (); node.id = (string) dataRecord.get ("id"); node.text = (string) dataRecord.get ("text"); node.parentid = (string) dataRecord.get ("parentid"); Nodelist.put (node.id, node); } // 构造无序的多叉树 SET intpirtSet = nodelist.EntrySet (); for (iterator it = intrySet.iterator (); it.hasnext ();) {node node = (node) ((map.entry) it.next ()). getValue (); if (node.parentid == null || node.parentid.equals ("")) {root = node; } else {((node) nodelist.get (node.parentid)). addchild (node); }} // 输出无序的树形菜单的 json 字符串 System.out.println (root.tostring ()); // 对多叉树进行横向排序 root.sortchildren (); // 输出有序的树形菜单的 json 字符串 System.out.println (root.toString ()); // 程序输出结果如下 (无序的树形菜单) () : // {// id: '100000', // текст: '廊坊银行总行', // дети: [// {// id: '110000', // текст: '廊坊分行', // дети: [// {// id: '113000', // text: '廊坊银行开发区支行', // leaf: // {// id: '113000', // text: '廊坊银行开发区支行' '111000', // текст: '廊坊银行金光道支行', // Leaf: true //}, // {// id: '112000', // текст: '廊坊银行解放道支行', // дети: [// {// id: '112200', // текст: '廊坊银行三大街支行', // Leaf: True //}, // {// id: '112100', // tex: ', //, // {// id:' 112100 ', // stex:' / /{ / /{ / /id: '112100', // steam: ', //}, // { / /id:' 112100: } //] //} //] //} //] //} // 程序输出结果如下 (有序的树形菜单) ()) // //} // 程序输出结果如下 ()) ()) // {// id: '100000', // Текст: '廊坊银行总行', // Дети: [// {// id: '110000', // текст: '廊坊分行', // дети: [// { / идентификатор: '111000: '廊坊银行金光道支行', // Leaf: true //}, // {// id: '112000', // text: '廊坊银行解放道支行', // дети: [// {// id: '112100', // текст: '廊坊银行广阳道支行', // leaf: true //}, // {// id: '11200', // text: '廊坊银行三大街支行', // // {// id: '11200', // 廊坊银行三大街支行 ', // // wid: // {// id: '113000', // text: '廊坊银行开发区支行', // leaf: true //} //] //} //] //}}}/*** 节点类*/class node {/***节点编号*/public String Id; / ** * 节点内容 */ public String Text; / ** * 父节点编号 */ public String parentId; / ** * 孩子节点列表 */ частные дети детей = новые дети (); // 先序遍历 , 拼接 json 字符串 public String toString () {string result = "{" + "id: '" + id + "" + ", text:" " + text +"' "; if (дети! = null && kinds.getSize ()! = 0) {result + = ", дети:" + kids.toString (); } else {result += ", leaf: true"; } return result + "}"; } // 兄弟节点横向排序 public void sortChildren () {if (дети! = Null && kids.getSize ()! = 0) {kids.sortchildren (); }} // 添加孩子节点 public void addChild (узловой узел) {this.children.addchild (node); }}/*** 孩子列表类*/class children {private list list = new ArrayList (); public int getSize () {return list.size (); } public void AddChild (узлы узла) {list.add (node); } // 拼接孩子节点的 json 字符串 public String toString () {String result = "["; for (iterator it = list.iterator (); it.hasnext ();) {result += ((node) it.next ()). toString (); Результат += ","; } result = result.substring (0, result.length () - 1); Результат += "]"; результат возврата; } // 孩子节点排序 public void sortChildren () {// 对本层节点进行排序 // 可根据不同的排序属性 , 传入不同的比较器 , 这里传入 id 比较器 collections.sort (list, new nodeidcomparator ()); // 对每个节点的下一层节点进行排序 for (iterator it = list.iterator (); it.hasnext ();) {((node) it.next ()). Sortchildren (); }}}/** * 节点比较器 */class nodeidcomparator реализует компаратор {// 按照节点编号比较 public int compare (Object O1, Object O2) {int j1 = integer.parseint (((node) o1) .id); int j2 = integer.parseint (((узл) o2) .id); возврат (J1 <J2? -1: (J1 == J2? 0: 1)); }}/** * 构造虚拟的层次数据 */Class VirtualDatagenerator {// 构造无序的结果集列表 , 实际应用中 该数据应该从数据库中查询获得; 该数据应该从数据库中查询获得; Public Static List getVirtualResult () {List Datalist = new ArrayList (); Hashmap dataRecord1 = new hashmap (); dataRecord1.put ("id", "112000"); dataRecord1.put ("text", "廊坊银行解放道支行"); dataRecord1.put ("parentid", "110000"); Hashmap dataRecord2 = new hashmap (); dataRecord2.put ("id", "112200"); dataRecord2.put ("text", "廊坊银行三大街支行"); dataRecord2.put ("parentid", "112000"); Hashmap dataRecord3 = new hashmap (); dataRecord3.put ("id", "112100"); dataRecord3.put ("text", "廊坊银行广阳道支行"); dataRecord3.put ("parentid", "112000"); Hashmap dataRecord4 = new hashmap (); dataRecord4.put ("id", "113000"); dataRecord4.put ("text", "廊坊银行开发区支行"); dataRecord4.put ("parentid", "110000"); Hashmap dataRecord5 = new hashmap (); dataRecord5.put ("id", "100000"); dataRecord5.put ("text", "廊坊银行总行"); dataRecord5.put ("parentId", ""); Hashmap dataRecord6 = new hashmap (); dataRecord6.put ("id", "110000"); dataRecord6.put ("text", "廊坊分行"); dataRecord6.put ("parentid", "100000"); HashMap DataRecord7 = new HashMap (); dataRecord7.put ("id", "111000"); dataRecord7.put ("text", "廊坊银行金光道支行"); dataRecord7.put ("parentid", "110000"); datalist.add (dataRecord1); datalist.add (dataRecord2); datalist.add (dataRecord3); datalist.add (dataRecord4); datalist.add (dataRecord5); datalist.add (dataRecord6); datalist.add (dataRecord7); вернуть DataList; }}以上这篇 java 、 js 中实现无限层级的树形结构方法 (类似递归) 就是小编分享给大家的全部内容了 , 希望能给大家一个参考 , 也希望大家多多支持武林网。 也希望大家多多支持武林网。