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 ...
随机推荐
- F5负载均衡 MIBs bigip oid
F5 MIBs 分组bigip-ltmpool-stat oid=".1.3.6.1.4.1.3375.2.2.5.2.3.1.1" name=&q ...
- Docker学习笔记——1.2 Docker组件
Docker的核心组件包括: Docker客户端和服务器,也称为Docker引擎: Docker镜像: Registry: Docker容器. 1.Docker客户端和服务器 Docker是一个客户端 ...
- win10卸载office2010的工具
本来想装一个高版本的office,于是想先卸载老版本的.结果在win10的应用和功能中,愣是没找到安装的office2010,使用360也找不到,没法卸载. 网上搜了一下,找到一个好工具,micros ...
- 一个unsigned int 数的二进制表示中有多少个1
这是一道面试题可以用以下的一些方案.第一种是很容易想到的采用循环的方式并且与1进行位与运算,具体代码如下. 1unsigned int GetBitNumOfOne_ByLoop1(unsigned ...
- 个人PC电脑 关闭网卡自启
前言: 今早我打开我的电脑,惊呆了.出现了以下字样: This Product is covered by one or more of the following patents ... 看了BIO ...
- JDK1.8 的 HashMap 源码之注意事项
文章目录 链表变树 树形结构与Comparable,性能极致与降低 链表与树之间转换的阈值 英语渣靠着翻译插件,大概翻译的,难免有错误之处,注意甄别: 链表变树 This map usually ac ...
- UVALive-8201-BBP Formula
8201-BBP Formula Time limit: 3.000 seconds In 1995, Simon Plouffe discovered a special summation sty ...
- Android--自定义Dialog style
<style name="dialog" parent="@android:style/Theme.Dialog"> <item name=& ...
- 对称加密,非对称加密,数字签名,https
对称加密和非对称加密 对称加密 概念:加密秘钥和解密秘钥使用相同的秘钥(即加密和解密都必须使用同一个秘钥) 特点:一对一的双向保密通信(每一方既可用该秘钥加密,也可用该秘钥解密,非对称加密是多对一的单 ...
- jquery.marquee
http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...