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. Redis的特性及运用

    Redis特性 一个产品的使用场景肯定是需要根据产品的特性,先列举一下Redis的特点: 读写性能优异 持久化 数据类型丰富 单线程 数据自动过期 发布订阅 分布式 这里我们通过几个场景,不同维度说下 ...

  2. 从零开始封装React UI 组件库并发布到NPM

    github 开源地址:zswui github 说明文档:wiki 1.新建目录wui (1)进入到 wui 目录 执行 npm init 命令初始化项目.更具提示信息填充将会生成的 package ...

  3. [ kvm ] 学习笔记 8:Ovirt 基础及使用

    目录- 1. oVirt 功能介绍- 2. oVirt 安装部署    - 2.1 基础准备    - 2.2 安装 ovirt-engine    - 2.3 配置 kvm 主机    - 2.4 ...

  4. 17点睛Spring4.1-@Conditional

    17.1 @Conditional @Conditional为按照条件配置spring的bean提供了支持,即满足某种条件下,怎么配置对应的bean; 应用场景 当某一个jar包在classpath中 ...

  5. soapui教程

    简介 SOAPUI,一款专业的web service的测试软件,SoapUI也是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为 ...

  6. AWS 数据库(七)

    数据库概念 关系型数据库 关系数据库提供了一个通用接口,使用户可以使用使用 编写的命令或查询从数据库读取和写入数据. 关系数据库由一个或多个表格组成,表格由与电子表格相似的列和行组成. 以行列形式存储 ...

  7. 安装Vim插件——ViPlugin

    打开Eclipse,找到Help——Install New Software  Name输入 viPlugin ,Location输入 viplugin.com ,点击OK 之后同意协议,然后等待下载 ...

  8. HDU 4352:XHXJ's LIS

    题目:(原题是英文而且很迷) 求区间内数的LIS长度==k的个数,比如153948的LIS为1 3 4 8,长度为4.据说这种题叫DP中DP,本来是线性,再套一层状压+数位,简直厉害到不行…… 线性的 ...

  9. pv回收

    学习cloudman中的k8s 152课,创建pod时,需要在k8s-host2 中挂着到在k8s-master 中/nfs中创建的挂载目录,结果提示没有/nfs/pv1 root@k8s-maste ...

  10. 《ucore lab1》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 练习1:理解通过make生成执行文件的过程 详见<ucore lab1 exercise1>实验报告 练习2:使用qemu执行并调试 ...