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 ...
随机推荐
- C#中 IEnumerable, ICollection, IList, List的使用
List是類,實現了IList接口,IList繼承了ICollection,ICollection繼承了IEnumerable,IEnumerable是其中最底層的接口. 實現IEnumerable接 ...
- CF1266C Diverse Matrix
思路:构造题. 实现: #include <bits/stdc++.h> using namespace std; ][]; int main() { int r, c; while (c ...
- 你应该知道的4个DSP开发支持库
引言 在dsp开发中,为了节省开发时间和难度,TI将一些成熟的算法封装为模块,供开发者使用.如果能充分利用这些算法支持库,对于加快dsp开发进程与提高代码质量.稳定性有非常大的帮助. Digital ...
- burpsuite破解网页密码
1.暴力破解网页登录 http://jingyan.baidu.com/article/200957619c8739cb0721b4ff.html https://zhuanlan.zhihu.com ...
- k8s nfs
1 yum install -y nfs-utils-* 2 mkdir /home/data 3 vim /etc/exports /home/data 10.0.0.0/24(rw,async,n ...
- 学习开始记录一下,java 还是python?
2019.11.24开始正式开始学习JAVA. 在 bilibili站看了三天,大神们的对此问题的分析,介绍,我选择了JAVA开发语言. 在看了高淇老师的JAVA300视频,感觉比较对路,特别是第一章 ...
- numpy 数组集合运算及下标操作
1. 数组的集合运算 1.1. 并集 np.union1d(a,b)计算数组的并集: In [1]: import numpy as np In [2]: a = np.array([1,2,3]) ...
- hexo 个人博客搭建
Hexo 小插曲介绍 虽然标题是第一次写博客. 但是我这个困难户至少挣扎了1年多了, 一直下不去手.今天可算是开了个头. 贵在坚持吧 抽时间介绍我的hexo安装历程吧,今天实在是有点困了,要睡觉了. ...
- Scrapy框架1——简单使用
一.设置与编写 打开cmd,选择好路径 1.创建项目scrapy startproject projectname d:\爬虫\11.scrapy>scrapy startproject tes ...
- Spring Boot集成redis完整实例
添加依赖: (Spring Data Redis) 启动redis: 配置文件中进行配置: redis基本使用思路: redis中不存在就查询数据库然后存入redis: 查看日志: