首页 > 编程语言 >直播网站程序源码,element el-menu,前端做菜单搜索

直播网站程序源码,element el-menu,前端做菜单搜索

时间:2023-04-05 14:25:57浏览次数:47  
标签:el return menu item 源码 key treeList const children

直播网站程序源码,element el-menu,前端做菜单搜索

方案一:递归+indexof

实现步骤: JS 实现树形结构数据的模糊搜索查询,

 

即使父节点没有,但子节点含有,父节点仍要返回。

 


/**
 * 递归tree关键词搜索
 *
 * @param {key} 需要递归的key名
 * @param {value} 需要搜索查询的关键字
 * @param {treeList} 遍历tree列表
 * @return {saveList} 返回查询数组列表
 */
function onFuzzyTreeList (key, value, treeList, saveList = []) {
  return new Promise((resolve, reject) => {
    treeList.forEach(item => {
      if (item[key].indexOf(value) > -1) {
        saveList.push(item);
      } else {
        if (item.children && item.children.length > 0) {
          const _reData = onFuzzyTreeList(key, value, item.children, saveList);
          if (_reData && _reData.length > 0) {
            saveList.push({
              ...item,
              children: _reData
            })
          }
        }
      }
    })
    resolve(saveList)
  })
}
// 调用
onFuzzyTreeList('name', '搜索', treeList)
 

方案二:抽取1-2级数据重构(推荐)

1.这里只会默认两级数据的情况下

 


function onFuzzyTreeList(key, value, treeList) {
  // 所有一级导航组成的数组
  const firstArr = treeList.map((it) => ({ name: it.name, id: it.id, level: 1 }))
  // 所有二级导航组成的数组
  const secondArr = treeList.reduce((rd, it1) => {
    if (!it1.children?.length) return rd
    it1.children.forEach((it2) => {
      ;(it2.level = 2), (it2.firstId = it1.id)
    })
    return [...rd, ...it1.children]
  }, [])
  // 一二级导航组成的数组
  const allArr = [...firstArr, ...secondArr]
  function search(key, val) {
    const arr = allArr.filter((it) => it[key].indexOf(val) != -1)
    const firstArrIds = [...new Set(arr.map((it) => it.firstId || it.id))]
    const firstArrResult = firstArr.filter((it) => firstArrIds.includes(it.id))
    firstArrResult.forEach((it) => {
      it.children = arr.filter((it2) => it2.firstId == it.id)
    })
    return firstArrResult
  }
  return search(key, value)
}
 

 

方案三:递归+filter+indexof

 

/** @function 定义前端过滤函数 */
const filterTree = (treeArr, keywords) => {
  function findItem(arr) {
    let res = arr.filter((item) => {
      if (item.children && item.children.length > 0) {
        item.children = childFilter(item.children, keywords)
        console.log(item.children)
      }
      return item.name.indexOf(keywords) !== -1 //不一样的过滤掉
    })
    return res
  }
  function childFilter(childArr, keywords) {
    let res = childArr.filter((item) => {
      // TODO:这里后端说暂时只有2级,所以先预留一下递归逻辑
      if (item.children && item.children.length > 0) {
      item.children = childFilter(item.children, keywords)
      return item.name.indexOf(keywords) !== -1
      }
    })
    return res
  }
  return findItem(treeArr)
}

 

 以上就是 直播网站程序源码,element el-menu,前端做菜单搜索,更多内容欢迎关注之后的文章

 

标签:el,return,menu,item,源码,key,treeList,const,children
From: https://www.cnblogs.com/yunbaomengnan/p/17289357.html

相关文章

  • 直播网站源码,修改el-input边框颜色
    直播网站源码,修改el-input边框颜色.el-input{ --el-input-hover-border-color:#f56c6c; --el-input-focus-border-color:#f56c6c;}​以上就是直播网站源码,修改el-input边框颜色,更多内容欢迎关注之后的文章 ......
  • 直播电商平台开发,用el-checkout-group实现穿梭框el-transfer效果
    直播电商平台开发,用el-checkout-group实现穿梭框el-transfer效果一:页面构建 <el-form-itemlabel="选择模块:"prop="pubTime">  <divclass="app-select">   <divclass="list">    <el-inputv-model="searchWord&qu......
  • 在windows下通过xshell来实现跳板机配置pycharm环境和xftp文件访问
    xshell实现跳板机先使用xshell实现跳板机,并将对应的跳板机窗口打开。跳板机使用xshell的隧道功能实现,选择作为中转的服务器B的属性。选择隧道选择添加侦听端口为本机A的,后面通过localhost:7777进行访问。这个端口可以自己设置不同的。目标主机就是通过服务器B作为跳板机,要......
  • pdf提取excel表格-财务报表
    方式一、本来是pdf可以直接用acrobatpdf,如果不行就粘贴到word然后粘贴到excel然后分列。一般第二种的格式会好很多。方式二、https://www.adobe.com/acrobat/online/pdf-to-excel.html方式三、[Tabula:从PDF中提取表格](https://tabula.technology/) ......
  • kubegres 源码解析(二) kubebuilder简介
    摘要Kubegres完全使用KubebuilderV3版本开发,在对Kubegres进行代码解析前,首先了解一下Kubebuilder,本文尝试理清几个问题:如何使用Kubebuilder生成Controller/Operator项目?项目结构是什么,每个文件的作用是什么?具体到最重要的几个文件,代码如何组织,功......
  • Zookeeper Session源码
    我们说客户端与服务端建立连接交互的时候会创建一个Session与之对应,那假设客户端请求来了,服务端是如何处理的?Session又是如何创建出来的?我们先来看第一个问题:服务端如何处理客户端发来的请求?一、如何处理请求所谓的请求全称是网络请求,涉及到网络就少不了Socket通信,ZooKeep......
  • DOM概述&Element对象获取与使用
    概述Document Object Model文档对象模型将标记语言的各个组成部分封装为对象JavaScript 通过DOM,就能够对HTML进行操作了Document:整个文档对象Element:元素对象Attribute:属性对象Text: 文本对象Comment:注释对象改变HTML元素的内容改变HTML元素的样式(CSS)对H......
  • 多任务版TCP服务端程序开发案例+源码
    Python进阶篇-系列文章全篇......
  • [!] CDN: trunk URL couldn‘t be downloaded: https://cdn.jsdelivr.net/cocoa/
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!清华CocoaPods镜像源:CocoaPods镜像使用帮助CocoaPods是一个Cocoa和CocoaTouch框架的依赖管理器,具体原理和Homebrew有点类似,都是从GitHub下载索引,然后根据索引下载依赖的源......
  • MySQL四种日志binlog/redolog/relaylog/undolog
    优质博文:IT-BLOG-CN一、binlogbinlog记录数据库表结构和表数据变更,比如update/delete/insert/truncate/create,它不会记录select。存储着每条变更的SQL语句和XID事务Id等等。binlog日志文件如下:[root@192.168.10.11]#mysqlbinlogmysql-binlog.0000012..........#at523#......