java递归、js递归,无限极分类菜单表
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递归,无限极分类菜单表的更多相关文章
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- 无限极分类的JS实现
纯JS实现无限极分类 <!DOCTYPE html> <html> <head> <title></title>//引入Jquery < ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- php无限极分类递归与普通
1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...
- php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- PHP实现菜单无限极分类
菜单数据 这里我们的菜单数据是临时数据, 没有从数据库中查询处理,数据基本和数据库中的的相似. 数据如下: $items = array( 1 => array('id' => 1, 'p ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
随机推荐
- Nginx配置自定义的403页面
1.开启nginx的状态码,虚拟主机配置中加入下边一段 location /nginx_status{ stub_status on; access_log off; } 或着在nginx的http模 ...
- Mysql8.0.17版本不能自动创建activiti表的坑
maven项目如下: 配置好数据库,和activiti的配置之后,开始执行流程部署 package com.yuanqiao.first_activiti.deployment; import jav ...
- [转]C++ STL中的Binary search(二分查找)
链接地址:https://www.cnblogs.com/wkfvawl/p/9475939.html
- 【Leetcode_easy】1051. Height Checker
problem 1051. Height Checker solution class Solution { public: int heightChecker(vector<int>&a ...
- APT攻击与银行
APT与传统攻击 APT:团队作战,拥有自研工具集,意图明确,技术高超,拥有政府或商业背景,潜伏期多达数年. 传统攻击:脚本小子,水平参差不齐,短期攻击,直接获取利益为目标. 攻击目标 APT攻击链 ...
- Error:(18, 51) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
问题:主要是因为jdk版本不一样 解决: 方法一:List<String> list=new ArrayList<Stirng>(); 方法二:重新安装jdk8的版本(安装和配 ...
- context.xml文件配置
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml& ...
- certutil在传输payload中的新奇技巧
好久没更新博客了,最近在实习的过程中还是见识到不少东西. 不多说,直接开始正文. 首先说一下certutil在渗透测试中用到的特别多,下载文件,计算hash,以及base64编码等等. 在这里介绍ba ...
- 022 Android .9图片的含义及制作教程
1.图片(.9.png格式)的概念 (1)9patch图片是andriod app开发里一种特殊的图片形式,文件的扩展名为:.9.png (2)9patch图片的作用就是在图片拉伸的时候保证其不会失真 ...
- Kibana配置安装
学习网站 https://discuss.elastic.co https://github.com/elastic 配置 server.port: 5601 server.host: "l ...