JS 中:
var znodes = [{id: 0, pid: -1, ชื่อ: "aaaa"}, {id: 1, pid: 0, ชื่อ: "a"}, {id: 11, pid: 1, ชื่อ: "a1"}, {id: 12, pid: 1, ชื่อ: "a2"} {id: 2, pid: 0, ชื่อ: "b"}, {id: 21, pid: 2, ชื่อ: "b1"}, {id: 22, pid: 2, ชื่อ: "b2"}, {id: 23, pid: 2, ชื่อ: "b3"}, {id: 3, pid: {id: 32, pid: 3, ชื่อ: "c2"}, {id: 33, pid: 3, ชื่อ: "c3"}, {id: 34, pid: 31, ชื่อ: "x"}, {id: 35, pid: 31, ชื่อ: "y"}, {id: 36, pid: {id: 37, pid: 36, ชื่อ: "z1123"}, {id: 38, pid: 37, ชื่อ: "z123123123"}]; function treemenu (a) {this.tree = a || []; this.groups = {};}; treemenu.prototype = {init: function (pid) {this.group (); ส่งคืนสิ่งนี้ getDom (this.groups [PID]); }, กลุ่ม: function () {สำหรับ (var i = 0; i <this.tree.length; i ++) {ถ้า (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) {ถ้า (! 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 = ใหม่ treemenu (znodes) .init (0); การแจ้งเตือน (html);Java:
การทดสอบแพ็คเกจ; นำเข้า java.util.arraylist; นำเข้า java.util.comparator; นำเข้า java.util.hashmap; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า java.util.set java.util.collections; หลัก (สตริง [] args) {// 读取层次数据结果集列表รายการ datalist = virtualDatagenerator.getVirtualResult (); // 节点列表(散列表, 用于临时存储节点对象) hashmap nodelist = new hashmap (); // 根节点 node root = null; // 根据结果集构造节点列表(存入散列表) สำหรับ (iterator it = datalist.iterator (); it.hasnext ();) {แผนที่ dataRecord = (map) it.next (); โหนดโหนด = new node (); node.id = (string) dataRecord.get ("id"); node.text = (string) dataRecord.get ("text"); node.parentId = (string) dataRecord.get ("parentId"); Nodelist.put (node.id, โหนด); } // 构造无序的多叉树 set entrySet = nodeList.entrySet (); สำหรับ (iterator it = entryset.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 (โหนด); }} // 输出无序的树形菜单的 json 字符串 system.out.println (root.toString ()); // 对多叉树进行横向排序 root.sortchildren (); // 输出有序的树形菜单的 json 字符串 system.out.println (root.toString ()); // 程序输出结果如下(无序的树形菜单) (格式化后的结果): // {// id: '100000', // text: '廊坊银行总行', // เด็ก ๆ : [// {// id: '110000', // text: '廊坊分行', //: [// {// id: '113000' '廊坊银行金光道支行', // leaf: true //}, // {// id: '112000', // text: '廊坊银行解放道支行', // เด็ก ๆ : [// {// id: '112200', // text: '廊坊银行三大街支行', // leaf: true //}, // {// id: '112100', // //] //} //] //} // 程序输出结果如下(有序的树形菜单) (格式化后的结果): // {// id: '100000', // ข้อความ: '', // เด็ก ๆ : [// {// id: '110000', // text: '廊坊分行', // // // // id: '112000', // text: '廊坊银行解放道支行', // เด็ก: [// {// id: '112100', // ข้อความ: '廊坊银行广阳道支行', // leaf: true //}, // {// id: '112200' '廊坊银行开发区支行', // leaf: true //} //] //} //] //}}}/*** 节点类*/คลาสโหนด {/***节点编号*/รหัสสตริงสาธารณะ; / ** * 节点内容 */ ข้อความสตริงสาธารณะ; / ** * 父节点编号 */ Public String Parentid; / ** * 孩子节点列表 */ เด็กเด็ก ๆ = เด็กใหม่ (); // 先序遍历, 拼接 json 字符串สตริงสาธารณะ toString () {string result = "{" + "id: '" + id + "" " +", ข้อความ:' " + ข้อความ +" '"; if (เด็ก! = null && children.getSize ()! = 0) {result + = ", เด็ก:" + children.toString (); } else {result += ", leaf: true"; } ส่งคืนผลลัพธ์ + "}"; } // 兄弟节点横向排序โมฆะสาธารณะ sortchildren () {ถ้า (เด็ก! = null && children.getSize ()! = 0) {เด็ก. sortchildren (); }} // 添加孩子节点โมฆะสาธารณะ addchild (โหนดโหนด) {this.children.addchild (โหนด); }}/*** 孩子列表类*/คลาสเด็ก {รายการส่วนตัว = new ArrayList (); สาธารณะ int getSize () {return list.size (); } โมฆะสาธารณะ addchild (โหนดโหนด) {list.add (โหนด); } // 拼接孩子节点的 json 字符串สตริงสาธารณะ toString () {string result = "["; สำหรับ (iterator it = list.iterator (); it.hasnext ();) {result += ((node) it.next ()). toString (); ผลลัพธ์ += ","; } result = result.substring (0, result.length () - 1); ผลลัพธ์ += "]"; ผลการกลับมา; } // 孩子节点排序โมฆะสาธารณะ sortchildren () {// 对本层节点进行排序 // 可根据不同的排序属性, 传入不同的比较器, 这里传入 id 比较器 collections.sort (รายการ, nodeidComparator ใหม่ ()); // 对每个节点的下一层节点进行排序สำหรับ (iterator it = list.iterator (); it.hasnext ();) {((node) it.next ()). sortchildren (); }}}/** * 节点比较器 */คลาส nodeIdComparator ใช้เครื่องเปรียบเทียบ {// 按照节点编号比较 int public (วัตถุ O1, Object O2) {int J1 = integer.parseint ((Node) O1) .ID); int j2 = integer.parseint (((โหนด) O2) .ID); return (j1 <j2? -1: (j1 == j2? 0: 1)); }}/** * 构造虚拟的层次数据 */คลาส virtualDatagenerator {// 构造无序的结果集列表, 实际应用中, 该数据应该从数据库中查询获得; รายการสาธารณะคงที่ getVirtualResult () {รายการ datalist = new ArrayList (); hashmap dataRecord1 = new hashmap (); dataRecord1.put ("id", "112000"); dataRecord1.put ("ข้อความ", "廊坊银行解放道支行"); dataRecord1.put ("parentid", "110000"); hashmap dataRecord2 = new hashmap (); dataRecord2.put ("id", "112200"); dataRecord2.put ("ข้อความ", "廊坊银行三大街支行"); dataRecord2.put ("parentid", "112000"); hashmap dataRecord3 = new hashmap (); dataRecord3.put ("id", "112100"); dataRecord3.put ("ข้อความ", "廊坊银行广阳道支行"); dataRecord3.put ("parentid", "112000"); hashmap dataRecord4 = new hashmap (); dataRecord4.put ("id", "113000"); dataRecord4.put ("ข้อความ", "廊坊银行开发区支行"); dataRecord4.put ("parentid", "110000"); hashmap dataRecord5 = new hashmap (); dataRecord5.put ("id", "100000"); dataRecord5.put ("ข้อความ", "廊坊银行总行"); dataRecord5.put ("parentid", ""); hashmap dataRecord6 = new hashmap (); dataRecord6.put ("id", "110000"); dataRecord6.put ("ข้อความ", "廊坊分行"); dataRecord6.put ("parentid", "100000"); hashmap dataRecord7 = new hashmap (); dataRecord7.put ("id", "111000"); dataRecord7.put ("ข้อความ", "廊坊银行金光道支行"); 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 中实现无限层级的树形结构方法 (类似递归) 就是小编分享给大家的全部内容了, 希望能给大家一个参考,, 也希望大家多多支持武林网。