很多场景都需要使用树形数据,比如:一级菜单 - 二级菜单、省-市-区、公司-部门-小组、界-门-纲-目-科-属-种 等等。
数据结构通常如下所示(以下代码为ts写法):

const groupList: Group[] = [{groupId: '0',groupName: '江西省',isDefaultGroup: '0',children: [{groupId: '0-0',groupName: '赣州市',isDefaultGroup: '0',children: [{groupId: '0-0-0',groupName: '瑞金市',isDefaultGroup: '0',},],},],},{groupId: '1',groupName: '浙江省',isDefaultGroup: '1',children: [{groupId: '1-0',groupName: '杭州市',isDefaultGroup: '0',children: [{groupId: '1-0-0',groupName: '西湖区',isDefaultGroup: '0',},],},],},{groupId: '2',groupName: '江苏省',isDefaultGroup: '0',children: [{groupId: '2-0',groupName: '南京市',isDefaultGroup: '0',children: [{groupId: '2-0-0',groupName: '中华门',isDefaultGroup: '0',},],},],},
];

已知groupId1-0-0如何找到它对应的名字:西湖区呢???

思路:

  1. 输入树形数据、需要匹配的字段、需要匹配字段的值、需要查找的字段。
  2. 遍历数组直到找出groupId1-0-0的对象。
  3. 保存结果并返回需要查找的字段的值。

知识点

  1. 闭包
  2. 递归

实现

// 以下代码有ts报错,知道怎么解决的请告诉我const findFieldValue = <T>(treeData: T[], key: string, value: string | number, field: string): string | number | boolean | null => {let res: string | number | null = null;const fn = (treeData: T[], key: string, value: string | number, field: K) => {if (!treeData?.length) return key;for (let index = 0; index < treeData.length; index++) {if (treeData[index][key] === value) {res = treeData[index][field];break;}if (treeData[index]?.children?.length) {fn(treeData[index].children, key, value, field);}}};fn(treeData, key, value, field);return res;
}

结果

 cosole.log(findFieldValue(treeData, 'groupId', '1-0-0', 'title')) // 西湖区

查找树形数据的某个值相关推荐

  1. 非递归式查找树形数据

    给你一棵树,怎么用非递归方式去查找里面满足要求的某些节点? 可以用队列来实现,举例如下: Android界面就是基于一棵树的结构来进行显示的,怎样通过一个ViewGroup,非递归式的找到它下面所有B ...

  2. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  3. 动态开辟指定数量的线程来查找动态开辟的数组中的1000000数据中的值

     1.项目包结构 array.h #ifndef _ARRAY_H_ #define _ARRAY_H_ /******************************************** ...

  4. 6-1 简单快速排序分数 10作者 唐艳琴单位 中国人民解放军陆军工程大学本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x)在整个数据中的排名(数据

    6-1 简单快速排序 分数 10 全屏浏览题目 切换布局 作者 唐艳琴 单位 中国人民解放军陆军工程大学 本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x) ...

  5. 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )

    文章目录 一.遍历后坐力数据 二.尝试修改后坐力数据 一.遍历后坐力数据 在上一篇博客 [Windows 逆向]CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内 ...

  6. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★

    文章目录 前言 一.查找子弹数据临时内存地址 二.查找子弹数据的静态地址 1.调试内存地址 05A59544 获取基址 05A59478 2.通过搜索基址 05A59478 获取内存地址 0E1DC1 ...

  7. Oracle查找重复数据

    2019独角兽企业重金招聘Python工程师标准>>> -- 使用ROWID查找重复数据 -- PK_PSNDOC:查找该字段的重复数据值 -- LASTFLAG:条件过滤字段 SE ...

  8. php 处理树形数据,php实现的树形结构数据存取类实例

    php实现的树形结构数据存取类实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  php实现的树形结构数据存取类实例.txt ] (友情提示:右键点上行txt文档 ...

  9. vue+element实现树状表格的增删改查;使用el-table树形数据与懒加载实现树状表格增删改查

    以下代码可以直接复制使用 一.情景: 列表是一个树状表格,可以无限添加下级,以及对列表的某一行进行增删改查(目前查没有写). 原博链接 二.本篇是在原博主的代码基础上添加了部分功能. 功能1: 给树状 ...

最新文章

  1. java B2B2C Springboot仿淘宝电子商城系统-负载均衡之ribbon+feign
  2. HiveSQL常用数据处理语句
  3. 多方法调用 一个出错 集体回滚_一个@Transaction哪里来这么多坑?
  4. hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...
  5. js一行四个 超过自动换行_干货!零基础学JavaScript要掌握的四个基本常识
  6. Mac操作指南:废纸篓里的文件无法清除如何解决?
  7. VM安装CentOS6-相关NAT上网VM-tools安装
  8. 系统建模与仿真 - 电子书下载(高清版PDF格式+EPUB格式)
  9. 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
  10. oracle重建orainventory,重建oraInventory解决ORA-20001
  11. 转-Tensorflow之GPU和CPU
  12. 【江枫】用Perl的hash数组实现个性化监控
  13. sklearn模块之朴素贝叶斯:(二)伯努利模型的实现
  14. 顺序表的c语言结构体描述,顺序表的基本方法实现C语言版
  15. 磨金石教育分享||想转行学习插画,应该怎么做,需要什么基础?
  16. Centos配置CA(证书颁发机构)
  17. Gopher China 2019 讲师专访-滴滴出行/R lab 高级专家工程师杜欢
  18. newman执行测试_Newman的使用讲解
  19. openwrt下有线网设置详细过程
  20. 第七章 - 类的详细设计

热门文章

  1. 一起来看看压敏电阻器的电路防护作用吧!
  2. JAVA窗体程序调用图片、音频、字体资源
  3. swagger 添加Token
  4. 计算机软考初级含金量高吗?
  5. C# 截取上传flv文件中其中一帧图片
  6. Python入门(三)--- 元组,字典,集合
  7. Linux第一本书 第八章 系统中的软件管理
  8. 嵌入式基础测试手册——基于NXP iMX6ULL开发板(3)
  9. 简介NXP的车规级MCU之KEA系列
  10. Android网络库之Okio源码分析