JS 中 :
var znodes = [{id: 0 ، pid: -1 ، الاسم: "aaaa"} ، {id: 1 ، pid: 0 ، الاسم: "A"} ، {id: 11 ، pid: 1 ، name: "a1" ، {id: 12 ، pid: 1 ، name: "a2" ، {id: 13 ، {id: 2 ، pid: 0 ، الاسم: "b"} ، {id: 21 ، pid: 2 ، الاسم: "b1"} ، {id: 22 ، pid: 2 ، الاسم: "b2"} ، {id: 23 ، pid: 2 ، الاسم: {id: 32 ، pid: 3 ، الاسم: "c2"} ، {id: 33 ، pid: 3 ، الاسم: "c3"} ، {id: 34 ، pid: 31 ، الاسم: "x"} ، {id: 35 ، pid: 31 ، الاسم: {id: 37 ، pid: 36 ، الاسم: "Z1123"} ، {id: 38 ، pid: 37 ، الاسم: "Z123123123"}] ؛ وظيفة treemenu (a) {this.tree = a || [] ؛ this.groups = {} ؛} ؛ treemenu.prototype = {init: function (pid) {this.group () ؛ إرجاع this.getdom (this.groups [pid]) ؛ } ، group: 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]) ؛ } آخر {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' ؛ لـ (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.util.arraylist ؛ استيراد java.util.comparator ؛ استيراد java.util.hashmap ؛ استيراد java.util.iterator ؛ استيراد java.util.list args) {// 读取层次数据结果集列表 قائمة datalist = VirtualDatagenerator.getVirtualResult () ؛ // 节点列表 (散列表 , 用于临时存储节点对象) hashmap nodelist = new hashmap () ؛ // 根节点 عقدة الجذر = فارغ ؛ // 根据结果集构造节点列表 (存入散列表) for (iterator it = datalist.iterator () ؛ it.hasNext () ؛) {map datarecord = (map) it.next () ؛ العقدة = node node () ؛ node.id = (string) datarecord.get ("id") ؛ node.text = (string) datarecord.get ("text") ؛ node.parentId = (string) datarecord.get ("parentid") ؛ nodelist.put (node.id ، العقدة) ؛ } // 构造无序的多叉树 set interset = nodelist.entrySet () ؛ لـ (iterator it = enterset.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' ، // text: '廊坊分行' ، // children: [// {// id: '113000' ، // text: '廊坊银行开发区支行' ، '111000' ، // النص: '廊坊银行金光道支行' ، // leaf: true //} ، // {// id: '112000' ، // text: '廊坊银行解放道支行' ، // children: [// {// id id: '112200' ، // text: '廊坊银行三大街支行' ، // leaf: ure //} ، // {// id: '112100' } //] //} //]. "廊坊银行金光道支行 '، // leaf: true //} ، // {// id:' 112000 '، // text:' 廊坊银行解放道支行 '، // children: [// {// id:' 112100 '، // ext // {// id: '113000' ، // text: '廊坊银行开发区支行' ، // leaf: true //} //] //} //] //}}}/*** 节点类*/class node {/***节点编号*/public string id ؛ / ** * 节点内容 */ نص سلسلة عامة ؛ / ** * 父节点编号 */ public string parentId ؛ / ** * 孩子节点列表 */ أطفال خاصين = أطفال جدد () ؛ // 先序遍历 , 拼接 json 字符串 السلسلة العامة toString () {string result = "{" + "id: '" + id + "'" + "، text: '" + text + "'" ؛ إذا (الأطفال! = null && children.getSize ()! = 0) {result + = "، الأطفال:" + أطفال. toString () ؛ } آخر {result += "، ورقة: صواب" ؛ } نتيجة الإرجاع + "}" ؛ } // 兄弟节点横向排序 public void sortchildren () {if (الأطفال! = null && children.getSize ()! = 0) {children.sortchildren () ؛ }} // 添加孩子节点 public void addchild (node node) {this.children.addchild (node) ؛ }}/*** 孩子列表类*/class children {private list = new ArrayList () ؛ public int getSize () {return list.size () ؛ } public void addchild (node node) {list.add (node) ؛ } // 拼接孩子节点的 json 字符串 string public tostring () {string result = "[" ؛ لـ (iterator it = list.iterator () ؛ it.hasnext () ؛) {result += ((node) it.next ()). toString () ؛ النتيجة += "،" ؛ } النتيجة = result.subString (0 ، result.length () - 1) ؛ النتيجة += "]" ؛ نتيجة العودة } // 孩子节点排序 public void sortchildren () {// 对本层节点进行排序 // 可根据不同的排序属性 , 传入不同的比较器 , 这里传入 比较器 collections.sort (list ، newidcomparator ()) ؛ // 对每个节点的下一层节点进行排序 for (iterator it = list.iterator () ؛ it.hasnext () ؛) {((node) it.next ()). sortchildren () ؛ }}}/** * 节点比较器 */class nodeidcomparator تنفذ المقارنة {// 按照节点编号比较 public int care (object o1 ، object o2) {int j1 = integer.parseint (((node) o1) .id) ؛ int j2 = integer.parseint (((Node) O2) .ID) ؛ العودة (J1 <J2؟ -1: (J1 == J2؟ 0: 1)) ؛ }}/** * 构造虚拟的层次数据 */class virtualDatagenerator {// 构造无序的结果集列表 , 实际应用中 该数据应该从数据库中查询获得; 该数据应该从数据库中查询获得; static 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 中实现无限层级的树形结构方法 (类似递归) 就是小编分享给大家的全部内容了 , 希望能给大家一个参考 , 也希望大家多多支持武林网。