一维数组转树状,常用菜单 栏目路由 转换成多维数组 多级菜单转换
原标题:一维数组转树状,常用菜单 栏目路由 转换成多维数组 多级菜单转换
用于将一维数组转换为树状结构,通常用于栏目菜单功能
/**
* 树状路由转换
* @param nodes 一维数组
* @param parentKey 匹配的字段
* @param childrenName 子集名称
* @param rootKeys 父类的值
* @returns 树状
*/
export function setTree(nodes: any[], parentKey = "parent_id", childrenName:"children", rootKeys: any = [0, "root"]) {
const rootNode: any[] = [];
const _child: any[] = [];
nodes.forEach((item) => {
const parentId = item[parentKey];
if (parentId == null || rootKeys.includes(parentId)) {
rootNode.push(item);
} else {
_child.push(item);
}
});
rootNode.forEach((item) => {
item[childrenName] = getChild(item.id, _child, parentKey, childrenName);
});
return rootNode;
}
/**
* 从数组中找到其父级
* @param id 父组件ID
* @param allNode 所有列表
* @param parentKey 当前组件的父级ID
* @returns 返回一个tree
*/
export function getChild(id: number, allNode: any[], parentKey: string, childrenName: string): any[] {
// 未获取到的
const _child: any[] = [];
//存放子菜单的集合
const listChild: any[] = [];
allNode.forEach((item) => {
if (item[parentKey] === id) {
listChild.push(item);
} else {
_child.push(item);
}
});
if (listChild.length) {
listChild.forEach((child) => {
child[childrenName] = getChild(child.id, _child, parentKey, childrenName);
});
}
return listChild;
}
相关阅读
-
骁龙625神U加持 小米A1最新版本v13.2发布
4 5星高分!骁龙625神U加持,小米A1再升级不预装MIUI系统的小米手机... -
苹果设计了一套“灵动岛” 挖孔被设计...
苹果设计的灵动岛被过誉了?挖孔被设计成了苹果手机自从iPhone 14系... -
腾讯WiFi管家今日起正式停止服务 无法...
腾讯WiFi管家今日起正式停止服务12月28日零时零分12月1日消息,因业... -
长存TLC颗粒+联芸1202国产固态硬盘来了...
你觉得2TB的SSD能便宜到多少价位?SSD真的是越来越便宜了,从之前一... -
9499元的公版RT4080嫌贵?七彩虹等厂商...
9499元的公版RT4080嫌贵?七彩虹厂商已宣布供货9499元的公版RTX 408... -
苹果将在iPhone15系列上 放弃传统闪电接口
李楠:伪户外的钛合金AppleWatchUltra卖得贼好今日消息,李楠发文表...