JS :
var znodes = [{id: 0, pid: -1, nama: "aaaa"}, {id: 1, pid: 0, name: "a"}, {id: 11, pid: 1, name: "a1"}, {id: 12, pid: 1, nama: "a2"}, {id: {{id: {id: 2, pid: 0, nama: "b"}, {id: 21, pid: 2, nama: "b1"}, {id: 22, pid: 2, nama: "b2"}, {id: 23, name: 2, nama: "b3"}, {id: 3, pid: 0, name: "c1," c ", c: {b3", {ID: 3, ID: 3, pID: 0, c: "c:" c: "c:" c: "c:" c: "c:" c: "c:" c: "c:" c: "c:" c: "c:" c: "c:" name: {{ID: {ID: {ID: {ID: 0, C: {ID: {ID: 0, {id: 32, pid: 3, nama: "c2"}, {id: 33, pid: 3, nama: "c3"}, {id: 34, pid: 31, nama: "x"}, {id: 35, pid: 31, nama: "y"}, {id: 31, 31, 31, name: "z" {id: 37, pid: 36, name: "z1123"}, {id: 38, pid: 37, name: "z123123123"}]; function treemenu (a) {this.tree = a || []; this.groups = {};}; treemenu.prototype = {init: function (pid) {this.group (); kembalikan this.getdom (this.groups [pid]); }, grup: 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'; untuk (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'; mengembalikan html; }}; var html = treemenu baru (znodes) .init (0); peringatan (html);Jawa:
Tes Paket; Impor java.util.arraylist; import java.util.comparator; import java.util.hashmap; import java.util.iterator; public class {public {public {public {multiple {multiple {multiple {multiple {multiple {multion* main (string [] args) {// 读取层次数据结果集列表 daftar datalist = virtualDataGenerator.getVirtualResult (); // 节点列表(散列表 , 用于临时存储节点对象) hashmap nodelist = new hashmap (); // 根节点 node root = null; // 根据结果集构造节点列表(存入散列表) untuk (iterator it = datalist.iterator (); it.hasnext ();) {peta datarecord = (peta) it.next (); Simpul simpul = node baru (); node.id = (string) datarecord.get ("id"); node.text = (string) datarecord.get ("text"); node.parentId = (string) datarecord.get ("parentId"); nodelist.put (node.id, node); } // 构造无序的多叉树 Set EntrySet = NoDeList.ENTRYSET (); untuk (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 (node); }} // 输出无序的树形菜单的 JSON 字符串 System.out.println (root.toString ()); // 对多叉树进行横向排序 root.sortchildren (); // 输出有序的树形菜单的 JSON 字符串 System.out.println (root.toString ()); // 程序输出结果如下(无序的树形菜单)(格式化后的结果) : // {// id: '100000', // Teks: '廊坊银行总行', // anak -anak: [// {// id: '110000', // Teks: '廊坊分行', // anak -anak: [// {// id: '113000', // Teks: '廊坊银行开发区支行', // Daun: // ID: ',', // {// Text:// Text:// Text:// Text:// Text:// {// {// {// {// {// {// {// {// {// {// {// {// { // daun: true //}, // {// id: '112000', // teks: '廊坊银行解放道支行', // anak -anak: [// {// id: '112200', // teks: '廊坊银行三大街支行', // leaf: true //}, // {// id: '112100', // Teks: '廊坊银行广阳道支行 廊坊银行广阳道支行 廊坊银行广阳道支行 廊坊银行广阳道支行 廊坊银行广阳道支行 ~ // } //] //} // 程序输出结果如下(有序的树形菜单)(格式化后的结果) : // {// id: '100000', // Teks: '廊坊银行总行', // anak -anak: [// {// id: '110000', // Teks: '廊坊分行', // anak -anak: [// {// ID: '111000', // Teks: '廊坊银行金光道支行', // {// ID: '111000', // TEXT: '{', / / ID: // ID: '111000', // TEXT: '{ / / ID {// ID: / / ID: / / ID: // ID: / / ID: / / ID: // ID: // { // Teks: '廊坊银行解放道支行', // anak -anak: [// {// id: '112100', // Teks: '廊坊银行广阳道支行', // Leaf: true //}, // {// id: '112200', // Teks: '廊坊银行三大街支行', // leaf: true //} //] //}, // {'{', // {// {// {// {// {// {// //} //] //} //] //}}}/*** 节点类*/class node {/***节点编号*/ID string publik; / ** * 节点内容 */ teks string publik; / ** * 父节点编号 */ Public String ParentID; / ** * 孩子节点列表 */ anak -anak swasta = anak -anak baru (); // 先序遍历 , 拼接 JSON 字符串 PUBLIK PUBLIK TOSTRING () {string result = "{" + "id: '" + id + "'" + ", Text: '" + Text + "'"; if (anak -anak! = null && children.getsize ()! = 0) {result + = ", anak -anak:" + anak -anak. ToString (); } else {result += ", Leaf: true"; } return hasil + "}"; } // 兄弟节点横向排序 public void sortChildren () {if (anak -anak! = Null && children.getSize ()! = 0) {children.sortchildren (); }} // 添加孩子节点 public void addChild (node node) {this.children.addChild (node); }}/*** 孩子列表类*/class Children {private list list = new arraylist (); int int getsize () {return list.size (); } public void addChild (node node) {list.add (node); } // 拼接孩子节点的 json 字符串 string publik toString () {string result = "["; untuk (iterator it = list.iterator (); it.hasnext ();) {result += ((node) it.next ()). toString (); hasil += ","; } result = result.substring (0, result.length () - 1); hasil += "]"; hasil pengembalian; } // 孩子节点排序 public void sortchildren () {// 对本层节点进行排序 // 可根据不同的排序属性 , 传入不同的比较器 , 这里传入 id 比较器 collections.sort (daftar, nodeidcomparator baru ()); // 对每个节点的下一层节点进行排序 untuk (iterator it = list.iterator (); it.hasnext ();) {((node) it.next ()). Sortchildren (); }}}/** * 节点比较器 */class NodeIdComparator mengimplementasikan pembanding {// 按照节点编号比较 Public int Compare (objek O1, objek O2) {int j1 = integer.parseint (((node) o1) .id); int j2 = integer.parseint (((node) o2) .id); return (j1 <j2? -1: (j1 == j2? 0: 1)); }}/** * 构造虚拟的层次数据 */class virtualDataGenerator {// 构造无序的结果集列表 , 实际应用中 , 该数据应该从数据库中查询获得; Daftar statis publik getVirtualResult () {daftar datalist = arrayList baru (); Hashmap datarecord1 = hashmap baru (); DataRecord1.put ("id", "112000"); DataRecord1.put ("Teks", "廊坊银行解放道支行"); DataRecord1.put ("ParentId", "110000"); Hashmap datarecord2 = hashmap baru (); datarecord2.put ("id", "112200"); datarecord2.put ("teks", "廊坊银行三大街支行"); datarecord2.put ("ParentId", "112000"); Hashmap datarecord3 = hashmap baru (); datarecord3.put ("id", "112100"); datarecord3.put ("teks", "廊坊银行广阳道支行"); DataRecord3.put ("ParentId", "112000"); Hashmap datarecord4 = hashmap baru (); datarecord4.put ("id", "113000"); datarecord4.put ("teks", "廊坊银行开发区支行"); datarecord4.put ("ParentId", "110000"); Hashmap datarecord5 = hashmap baru (); datarecord5.put ("id", "100000"); datarecord5.put ("teks", "廊坊银行总行"); datarecord5.put ("ParentId", ""); Hashmap datarecord6 = hashmap baru (); DataRecord6.put ("id", "110000"); DataRecord6.put ("Teks", "廊坊分行"); DataRecord6.put ("ParentId", "100000"); Hashmap datarecord7 = new HashMap (); DataRecord7.put ("id", "111000"); DataRecord7.put ("Teks", "廊坊银行金光道支行"); 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); mengembalikan dundalist; }}以上这篇 java 、 js 中实现无限层级的树形结构方法 (类似递归) 就是小编分享给大家的全部内容了 , 希望能给大家一个参考 , 也希望大家多多支持武林网。