蓝桥杯:商城管理系统

文章提供了一段JavaScript代码,用于将具有parentId的数据转换成树形结构并提取出权限列表。函数`getMenuListAndAuth`接收一个菜单数据列表,通过`createTree`和`traverse`两个辅助函数,分别创建树结构和扁平化权限数据。
摘要由CSDN通过智能技术生成

不废话直接上代码

// menuList 仅为示例数据,非实际使用数据,实际使用数据层级不确定(可能是四级五级六级等),数据结构与 menuList 一致
// 1. `parentId` 如果为 `-1`,则表示此条数据为顶级数据。
// 2. `parentId` 为该条数据的父级数据的 `id`。

let menuList = [
	{ parentId: -1, name: "添加管理员", id: 10, auth: "admin" },
	{ parentId: 10, name: "管理员权限分配", id: 11, auth: "admin-auth" },
	{ parentId: -1, name: "商品管理", id: 1, auth: "product" },
	{ parentId: 1, name: "商品列表", id: 4, auth: "productList" },
	{ parentId: 4, name: "商品分类", id: 5, auth: "category" },
	{ parentId: 5, name: "添加分类", id: 8, auth: "addClassification" },
	{ parentId: 4, name: "商品上架", id: 6, auth: "product" },
	{ parentId: -1, name: "评论管理", id: 2, auth: "comments" },
	{ parentId: -1, name: "个人中心", id: 3, auth: "profile" },
];

/**
 * @param {*} menuList 传入的数据
 * @return {*} menus 转化后的树形结构数据,auths 转化后的权限列表数组
 */

const getMenuListAndAuth = (menuList) => {
	// TODO:待补充代码
	let menus = createTree(menuList);
	let auths = traverse(menus, []);

	return { menus, auths }; // menus 转化后的树形结构数据,auths 转化后的权限列表数组
};

// 创建树结构
function createTree(data) {
	data.map((item) => {
		// 初始化每条数据里的 children 属性,存放子数据
		item.children = [];
		// 找每条数据的 parentId 对应数据的 id 放到属性 children 数组里
		data.map(child => ((item.id === child.parentId) && item.children.push(child)));
		return item;
	});

	// 此时 data 数据已经处理完毕,只需要把顶层元素过滤出来即可
	// console.log(data);

	// 过滤出顶层数据
	let father = data.filter((item) => item.parentId === -1);
	return father;
}

/**
 * 数据扁平化处理
 * @param {Object} data		需要扁平化的数据
 * @param {Array} result	存储需要的数据	
 * @returns 返回一个扁平化处理的数组
 */
function traverse(data, result) {
	for (let i = 0; i < data.length; i++) {
		// 当前元素的 auth 值放进去
		result.push(data[i].auth);
		// 如果 children 里有元素则递归进去找
		if (data[i].children.length > 0) {
			traverse(data[i].children, result);
		}
	}
	return result;
}

// 请勿删除和修改以下代码
try {
	module.exports = { getMenuListAndAuth };
} catch (e) {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值