当前位置: 首页 > news >正文

哪家做网站公司好网站集约化建设流程

哪家做网站公司好,网站集约化建设流程,网站建设尢金手指专业,图形设计网站前端开发中会经常用到树形结构数据#xff0c;如多级菜单、商品的多级分类等。数据库的设计和存储都是扁平结构#xff0c;就会用到各种Tree树结构的转换操作#xff0c;本文就尝试全面总结一下。 如下示例数据#xff0c;关键字段id为唯一标识#xff0c;pid为父级id如多级菜单、商品的多级分类等。数据库的设计和存储都是扁平结构就会用到各种Tree树结构的转换操作本文就尝试全面总结一下。 如下示例数据关键字段id为唯一标识pid为父级id用来标识父级节点实现任意多级树形结构。pid: 0“0”标识为根节点orderNum属性用于控制排序。 const data [{ id: 1, name: 用户中心, orderNum: 1, pid: 0 },{ id: 2, name: 订单中心, orderNum: 2, pid: 0 },{ id: 3, name: 系统管理, orderNum: 3, pid: 0 },{ id: 12, name: 所有订单, orderNum: 1, pid: 2 },{ id: 14, name: 待发货, orderNum: 1.2, pid: 2 },{ id: 15, name: 订单导出, orderNum: 2, pid: 2 },{ id: 18, name: 菜单设置, orderNum: 1, pid: 3 },{ id: 19, name: 权限管理, orderNum: 2, pid: 3 },{ id: 21, name: 系统权限, orderNum: 1, pid: 19 },{ id: 22, name: 角色设置, orderNum: 2, pid: 19 }, ]; 在前端使用的时候如树形菜单、树形列表、树形表格、下拉树形选择器等需要把数据转换为树形结构数据转换后的数据结效果图 预期的树形数据结构多了children数组存放子节点数据。 const treeData [{ id: 1, name: 用户中心, pid: 0 },{id: 2, name: 订单中心, pid: 0,children: [{ id: 12, name: 所有订单, pid: 2 },{ id: 14, name: 待发货, pid: 2 },{ id: 15, name: 订单导出,pid: 2 }]},{id: 3, name: 系统管理, pid: 0,children: [{ id: 18, name: 菜单设置, pid: 3 },{id: 19, name: 权限管理, pid: 3,children: [{ id: 21, name: 系统权限, pid: 19 },{ id: 22, name: 角色设置, pid: 19 }]}]} ]列表转树-list2Tree 方法一 递归遍历 从根节点递归查找每个节点的子节点直到叶子节点没有子节点 //递归函数pid默认0为根节点 function listToTree(items, pid 0) {//查找pid子节点let pitems items.filter(s s.pid pid)if (!pitems || pitems.length 0)return null//递归pitems.forEach(item {const res buildTree(items, item.id)if (res res.length 0)item.children res})return pitems }方法二 object的Key遍历 简单理解就是一次性循环遍历查找所有节点的父节点两个循环就搞定了。 第一次循环把所有数据放入一个Object对象map中id作为属性key这样就可以快速查找指定节点了。第二个循环获取根节点、设置父节点。 分开两个循环的原因是无法完全保障父节点数据一定在前面若循环先遇到子节点map中还没有父节点的否则一个循环也是可以的。 /*** 集合数据转换为树形结构。option.parent支持函数示例(n) n.meta.parentName* param {Array} list 集合数据* param {Object} option 对象键配置默认值{ key: id, parent: pid, children: children }* returns 树形结构数据tree*/ export function listToTree(list, option { key: id, parent: pid, children: children }) {let tree []// 获取父编码统一为函数let pvalue typeof (option.parent) function ? option.parent : (n) n[option.parent]// map存放所有对象let map {}list.forEach(item {map[item[option.key]] item})//遍历设置根节点、父级节点list.forEach(item {if (!pvalue(item))tree.push(item)else {map[pvalue(item)][option.children] ?? []map[pvalue(item)][option.children].push(item)}})return tree } 树转列表-tree2List 从上而下依次遍历把所有节点都放入一个数组中即可 /*** 树形转平铺list广度优先先横向再纵向* param {*} tree 一颗大树* param {*} option 对象键配置默认值{ children: children }* returns 平铺的列表*/ export function tree2List(tree, option { children: children }) {const list []const queue [...tree]while (queue.length) {const item queue.shift()if (item[option.children]?.length 0)queue.push(...item[option.children])list.push(item)}return list }搜索过滤树-filterTree 基本思路 为避免污染原有Tree数据这里的对象都使用了简单的浅拷贝const newNode { ...node }。递归为主的思路子节点有命中则会包含父节点当然父节点的children会被重置。 /*** 递归搜索树返回新的树形结构数据只要子节点命中保留其所有上级节点* param {Array|Tree} tree 一颗大树* param {Function} func 过滤函数参数为节点对象* param {Object} option 对象键配置默认值{ children: children }* returns 过滤后的新 newTree*/ export function filterTree(tree, func, option { children: children }) {let resTree []if (!tree || tree?.length 0) return nulltree.forEach(node {if (func(node)) {// 当前节点命中const newNode { ...node }if (node[option.children])newNode[option.children] null //清空子节点后面递归查询赋值const cnodes filterTree(node[option.children], func, option)if (cnodes cnodes.length 0)newNode[option.children] cnodesresTree.push(newNode)}else {// 如果子节点有命中则包含当前节点const fnode filterTree(node[option.children], func, option)if (fnode fnode.length 0) {const newNode { ...node, [option.children]: null }newNode[option.children] fnoderesTree.push(newNode)}}})return resTree }
http://www.hkea.cn/news/14387577/

相关文章:

  • 设计网站怎么收费东莞网站推广优化公司
  • 自住房车各项建设部网站做网站需要写配置文件吗
  • 后台网站模板下载网站建设需要哪些常用技术
  • 西安公司网站制作要多少钱企业网站建设 知乎
  • 网站建设了推广方案python在线编程翻译器
  • 为什么有些公司却没有自己的网站惠州手工外发加工网
  • 惠州网站推广排名建设银行网站无法登陆
  • 建设银行集团网站首页注册安全工程师
  • 模板式网站建设宁波网站优化
  • 网站设计主流尺寸芜湖网络科技有限公司
  • 太原网站制作优化seo公司加强门户网站建设通知
  • 营销型网站网站设计做微商在哪个网站打广告好
  • 做网站哪种域名好记网站建设的建议和意见
  • 申请免费网站空间网站开发哪家公司电话
  • 网站添加定位怎么做深圳注册公司需要哪些材料和流程
  • 手机网站建设推广软文wordpress打开好慢
  • 登录功能网站怎么做电商网站服务排名
  • 织梦如何做汽车贸易网站做网销的一天都在干嘛
  • 网站服务器在本地是指免费地方域名注册
  • 装修公司网站怎么做的网站建设兼职劳务协议书
  • 做网站在什么地方找济源建设工程管理处网站
  • 哪家建设公司网站做360手机网站
  • 沈阳网站建设多少钱销售类网站开发
  • 安丘做网站的公司多少钱要交税
  • 网站建设 鸿网站开发服务器的选择
  • 手机网站趋势代账会计在哪里找
  • 太原铁路建设有限公司网站怎么注销建设银行网站用户名
  • 美食网站建设的内容分析灞桥微网站建设
  • 业绩统计网站开发校园网站建设与应用
  • 常用网站设置免费个人手机网站