java-json

import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List; /**
* @Description: 菜单工具类
* @version: V1.0
*/
public class MenuTreeUtil {
/**
* @return
* @Author
* @Param nodes :所有的节点列表
*/
public List data(List<JSONObject> nodes) {
ArrayList<JSONObject> rootNode = new ArrayList<>();
for (JSONObject node : nodes) {
if (node.getString("parentId").equals("-1")) {
node.remove("checked");
rootNode.add(node);
}
}
for (JSONObject node : rootNode) {
List<JSONObject> child = getChild(String.valueOf(node.getString("id")), nodes);
if (child != null && !child.isEmpty() && child.size() > 0) {
node.remove("checked");
}
node.put("children", child);
}
return rootNode;
} /**
* @return
* @Author
* @Description //TODO 获取根节点的子节点
* @Param
*/
public List<JSONObject> getChild(String id, List<JSONObject> allNode) {
//存放子菜单的集合
ArrayList<JSONObject> listChild = new ArrayList<>();
for (JSONObject node : allNode) {
if (node.getString("parentId").equals(id)) {
listChild.add(node);
}
}
//递归:
for (JSONObject node : listChild) {
List<JSONObject> child = getChild(String.valueOf(node.getString("id")), allNode);
if (child != null && !child.isEmpty() && child.size() > 0) {
node.remove("checked");
}
node.put("children", child);
}
if (listChild.size() == 0) {
return null;
}
return listChild;
}
}

使用

MenuTreeUtil menuTreeUtil = new MenuTreeUtil();
List data = menuTreeUtil.data(JSON.parseArray(JSON.toJSONString(menus1), JSONObject.class));

java-object

import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; @Data
public class PermissionVo implements Serializable {
private static final long serialVersionUID = 106717167007024517L; private String id; private String title;
private String parentId; /**
* 权限菜单是否选中
*/
private boolean checked;
/**
* 是否展开,默认展开
*/
private boolean spread=true; private List<PermissionVo> children = new ArrayList<>();
}
import java.util.ArrayList;
import java.util.List; /**
* @ClassName: PermissionVo
* @Description: 菜单工具类
* @version: V1.0
*/
public class MenuTreeUtil {
/**
* @return
* @Author
* @Description //TODO
* @Param nodes :所有的节点列表
*/
public List data(List<PermissionVo> nodes) {
ArrayList<PermissionVo> rootNode = new ArrayList<>();
for (PermissionVo node : nodes) {
if (node.getParentId().equals("-1")) {
rootNode.add(node);
}
}
for (PermissionVo node : rootNode) {
List<PermissionVo> child = getChild(String.valueOf(node.getId()), nodes);
node.setChildren(child);
}
return rootNode;
} /**
* @return
* @Author
* @Description //TODO 获取根节点的子节点
* @Param
*/
public List<PermissionVo> getChild(String id, List<PermissionVo> allNode) {
//存放子菜单的集合
ArrayList<PermissionVo> listChild = new ArrayList<>();
for (PermissionVo node : allNode) {
if (node.getParentId().equals(id)) {
listChild.add(node);
}
}
//递归:
for (PermissionVo node : listChild) {
node.setChildren(getChild(String.valueOf(node.getId()), allNode));
}
if (listChild.size() == 0) {
return null;
}
return listChild;
}
}

js

function recursion(nodes) {
  var temp = [];
temp.push(nodes);
var rootNode = [] for(var i = 0; i < temp.length; i++) {
  rootNode.push(temp[i]);
} for(var i = 0; i < rootNode.length; i++) {
var childArrs = [];
childArrs = getChild(rootNode[i].id, nodes.children);
rootNode[i].children = childArrs;
}
return rootNode;
} function getChild(id, allNodes) {
  var childArr = [];   if(allNodes){
  for(var i = 0; i < allNodes.length; i++) {
  if(id == allNodes[i].parentId) {
  childArr.push(allNodes[i]);
}
}
}

   //递归
for(var i = 0; i < childArr.length; i++) {
  var child = [];
child = getChild(childArr[i].id, allNodes);
childArr[i].children = child;
}
if(!childArr) {
  return null;
}
return childArr;
}

java递归、js递归,无限极分类菜单表的更多相关文章

  1. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  2. 无限极分类的JS实现

    纯JS实现无限极分类 <!DOCTYPE html> <html> <head> <title></title>//引入Jquery < ...

  3. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  4. php无限极分类递归与普通

    1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...

  5. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  6. PHP实现无限极分类的两种方式,递归和引用

    面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...

  7. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  8. PHP实现菜单无限极分类

    菜单数据 这里我们的菜单数据是临时数据, 没有从数据库中查询处理,数据基本和数据库中的的相似. 数据如下: $items = array( 1 => array('id' => 1, 'p ...

  9. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

随机推荐

  1. Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较

    接上篇:Flink FileSink 自定义输出路径——BucketingSink 上篇使用BucketingSink 实现了自定义输出路径,现在来看看 StreamingFileSink( 据说是S ...

  2. NETTY option参数

    Channel配置参数 (1).通用参数 CONNECT_TIMEOUT_MILLIS :   Netty参数,连接超时毫秒数,默认值30000毫秒即30秒. MAX_MESSAGES_PER_REA ...

  3. Underscore.js 的模板功能

    Underscore是一个非常实用的JavaScript库,提供许多编程时需要的功能的支持,他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能. 无论你写一段小的js代码,还是写一 ...

  4. 【CSS3 DEMO】扑克正反面翻牌效果

    在线预览地址:http://dtdxrk.github.io/game/css3-demo/drawbox.html 用到两个属性: 一个是动画时间 transition-duration: 0.8s ...

  5. Django:bootstrap table自定义查询实现

    参考:https://jalena.bcsytv.com/archives/tag/bootstrap 背景: bootstrap table在客户端分页方式下,自带有简易的搜索功能,但是功能太单一, ...

  6. C++_没有STL不能解决的问题之——<algorithm>

    这个坑好大,慢慢写 一.非修改式序列操作 1.find() 在区间中查找出某元素第一次出现的位置(注意!!是返回地址值) int main(){ ]={,,,,,}; int *b; b=find(a ...

  7. poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)

    题目链接:https://vjudge.net/problem/POJ-1056 题意:给定一个字符串集,判断是否存在一个字符串是另一个字符串的前缀. 思路:和hdoj1671一样,有两种情况: 当前 ...

  8. Ribbon源

    在Riibon中一个非常重要的组件为LoadBalancerClient,它作为负载均衡的一个客户端 ServiceInstance choose(String serviceId); 从负载均衡器中 ...

  9. git的快速入门

    Git是目前世界上最先进的分布式版本控制系统(注意,仅仅是一个程序,而不是正真意义上的系统). Why为什么需要版本控制? 场景1:大学毕业前夕,你在完成毕业论文,初稿A写好了,找老师修改,老师提出意 ...

  10. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...