简单示例:

需求:输入 “题2” 字,希望树形结构中带有 “题2” 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回。

let arr = [
{
title: '标题1',
children: [
{
title: '标题11',
children: null
},
{
title: '标题21',
children: null
}
]
},
{
title: '标题2',
children: [
{
title: '标题22',
children: null
}
]
},
{
title: '标题3',
children: null
}
];

代码实现:

let mapTree = (value, arr) => {
let newarr = [];
arr.forEach(element => {
if (element.title.indexOf(value) > -1) { // 判断条件
newarr.push(element);
} else {
if (element.children && element.children.length > 0) {
let redata = mapTree(value, element.children);
if (redata && redata.length > 0) {
let obj = {
...element,
children: redata
};
newarr.push(obj);
}
}
}
});
return newarr;
}; console.log(mapTree('题2', arr));

结果:

[
{
title: '标题1',
children: [
{
title: '标题21',
children: null
}
]
},
{
title: '标题2',
children: [
{
title: '标题22',
children: null
}
]
}
]

复杂示例:

如果需要匹配多个属性,代码实现如下:

matchTreeData(arr, searchCon) {
let newArr = [];
let searchNameList = ['name', 'code', 'title'];
arr.forEach((item) => {
for (let i = 0, len = searchNameList.length; i < len; i++) {
let nameKey = searchNameList[i];
if (item.hasOwnProperty(nameKey)) {
if (item[nameKey] && item[nameKey].indexOf(searchCon) !== -1) {
newArr.push(item);
break;
} else {
if (item.childList && item.childList.length > 0) {
let resultArr = this.matchTreeData(item.childList, searchCon);
if (resultArr && resultArr.length > 0) {
newArr.push({
...item,
childList: resultArr
})
break;
}
}
}
} else {
continue;
}
}
})
return newArr;
}

JS实现树形结构数据的模糊搜索查询的更多相关文章

  1. 前端js重组树形结构数据方法封装

    不知道大家平时工作中,有没有遇到这样一种情况:后端接口返回的数据,全都是一维的数组,都是平铺直叙式的数据,业务需求却要你实现树形结构的功能.那么,针对这种情况该怎么办呢?是跟后台好好沟通一下呢,还是沟 ...

  2. js返回树形结构数据

    /** * 树形结构转换 * @param a * @param idStr * @param pidStr * @param chindrenStr * @returns {Array} */ fu ...

  3. js将有父子关系的数据转换成树形结构数据

    js将有父子关系的数据转换成树形结构数据 比如如下基本数据: let allDatas = [ { id: 3, name: 'bbbb', parendId: 1 }, { id: 2, name: ...

  4. 【Tree 3】树形结构数据加载的思考

    前面两篇文章,分别介绍了使用递归和非递归算法加载树形结构数据的方式,本篇文章,则是自己闲下来的时候,进行的一点小思考. 一.什么地方会用到树形结构 刚开始一看到这种结构的时候,最先是想到了家谱.家谱就 ...

  5. 构建树形结构数据(全部构建,查找构建)C#版

    摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...

  6. 树形结构数据存储方案的选择和java list转tree

    树形结构数据存储方案 Adjacency List:每一条记录存parent_idPath Enumerations:每一条记录存整个tree path经过的node枚举Nested Sets:每一条 ...

  7. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  8. Oracle树形结构数据---常见处理情景

    Oracle树形结构数据---常见处理情景 1.查看表数据结构 SELECT *      FROM QIANCODE.TREE_HIS_TABLE T  ORDER BY T.NODE_LEVEL; ...

  9. 【java基础 5】树形结构数据加载的思考

    前面两篇文章,分别介绍了使用递归和非递归算法加载树形结构数据的方式,本篇文章,则是自己闲下来的时候,进行的一点小思考. 一.什么地方会用到树形结构 刚开始一看到这种结构的时候,最先是想到了家谱.家谱就 ...

  10. 如何快速开发树形列表和分页查询整合的WInform程序界面

    我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...

随机推荐

  1. 9. 嵌套的 CMake

    9. 嵌套的 CMake 如果项目很大,或者项目中有很多的源码目录,在通过 CMake 管理项目的时候如果只使用一个 CMakeLists.txt ,那么这个文件相对会比较复杂,有一种化繁为简的方式就 ...

  2. [oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言

    ​ 程序本质 回忆上次内容 我们把python源文件 词法分析 得到 词流(token stream) 语法分析 得到 抽象语法树(Abstract Syntax Tree) 编译 得到 字节码 (b ...

  3. SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密

    一.介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号.银行卡号.手机号.工资等信息进行加密存储, ...

  4. 整段 html实现其中的每一个 a 标签跨域下载操作 window.URL.createObjectURL(blob)

    window.URL.createObjectURL(blob) a 标签下载问题,通常在 a 标签中加上download属性,就可完成对href属性链接文件的下载,但仅仅是限于同源文件,如果是非同源 ...

  5. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"解决yum下载报错

    报错信息 │ (SSH client, X server and network tools) │ │ │ │ ⮞ SSH session to root@192.168.117.166 │ │ • ...

  6. 【DingTalk】钉钉应用开发

    前言部分 最近要开发一个企业内部应用系统 无纸化办公使用钉钉,领导想在钉钉的基础上加入我们自己的应用 引入Activiti工作流引擎开发审批立项等等业务活动,做一个大一统的系统 然后让我负责开发钉钉应 ...

  7. 【JavaWeb】如何越过SpringMVC直接返回内容

    来自前同事问的一个问题,因为项目里面的SpringMVC会封装好一个固定的JSON响应规范: 可以看见,data属性下面,又会有一层data, 数据的消费方提出要求,只需要里面data的数据,外面的J ...

  8. 【Linux】真机安装CentOS8

    先制作启动U盘 https://www.cnblogs.com/mindzone/p/12961506.html 插入电脑,开机[这里我是把电脑硬盘格式化了,不会在电脑磁盘上找到任何系统,直接跳到启动 ...

  9. 【Spring-Security】Re10 Oauth2协议 P1 授权码模式 & 密码模式

    一.Oauth2协议: 第三方登录,即忘记本站密码,但是登录界面中提供了一些第三方登录,例如微信.支付宝.QQ.等等,通过第三方授权实现登录 第三方认证技术主要解决的时认证标准,各个平台的登录要遵循统 ...

  10. 使用 abortNavigation 阻止导航

    title: 使用 abortNavigation 阻止导航 date: 2024/8/3 updated: 2024/8/3 author: cmdragon excerpt: 摘要:在Nuxt3中 ...