tree 树形数据,扁平化数组,数组转树形结构父子级数据,模糊搜索,筛选

2024-02-29 11:36

本文主要是介绍tree 树形数据,扁平化数组,数组转树形结构父子级数据,模糊搜索,筛选,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 概要
    • 整体架构流程
    • 小结

概要

提示:树形数据搜索,筛选

整体架构流程

提示:根据搜索条件筛选树形数据
区域IsCheck固定为false,通过判断筛选后的数据有无 设备子级 再进行筛选
树形数据:

var tree = [{id: '01',parentId:'#',modeltype:'area',IsCheck :'false',text: '区域1',children: [{id: '011',parentId:'01',modeltype:'area',IsCheck :'false',text: '区域2',children: [{id: '0111',parentId:'001',text: '设备1',modeltype:'meter',IsCheck :'false',children: [],}, {id: '0112',parentId:'001',text: '设备2',modeltype:'meter',IsCheck :'true',children: [],},],}],}]

模糊搜索,子级与其上级,或区域父级

bindHandleTreeData(tree ,'设备1',{ children: "children"; text: "text" })/*** 搜索设备* @param treeData 树形参数* @param searchValue 搜索参数* @param fieldNames 树形数据结构-字段-看需求* @returns*/const bindHandleTreeData: any = (treeData: any,searchValue: any,fieldNames: { children: "children"; text: "text" }) => {if (!treeData || treeData.length === 0) {return [];}const array = [];for (let i = 0; i < treeData.length; i += 1) {if (bindHandleTreeData(treeData[i][fieldNames.children],searchValue,fieldNames).length > 0 ||treeData[i][fieldNames.text].includes(searchValue)) {array.push({...treeData[i],[fieldNames.children]: bindHandleTreeData(treeData[i][fieldNames.children],searchValue,fieldNames),});}}return array;};

树形数据扁平化-转数组(利于筛选)看需求

// 转数组const getArray = (data: any[]) => {var fun = (data: { [x: string]: any }) => {var a: any[] = [];for (var i in data) {var item = data[i];var obj: any = new Object();for (var j in item) {if (j !== "children") {obj[j] = item[j];}}a.push(obj);if (item.children && item.children.length > 0) {a = a.concat(fun(item.children));}}return a;};var list = fun(data);return list;};

将扁平化后的树形数据,转树形结构数据
搜索IsCheck === false

//扁平化数据
let cloneData=getArray(tree)
//筛选符合需求的数据(item.IsCheck === false)
let meterData = cloneData.filter((item) => {return item.IsCheck === false;});
if (meterData.length) {data = getTree(meterData, "#");}//最后结果console.log(data)  /*** 转树形* @param list 扁平化数据* @param parentId 父id 最顶级父id默认 parentId=#* @returns */const getTree = (list: any[], parentId: any) => {let fun = (parentId: any) => {let parent = parentId ? parentId : "#";let b = [];for (let i in list) {let item = list[i];if (item.parent === parent) {item.children = fun(item.id);// 清除无设备 -区域-看需求(不展示无设备子级元素的区域)if (item.children.length === 0 && item.modeltype === "area") {item["disableCheckbox"] = true;item["IsCheck"] = true;} else {b.push(item);}}}return b;};return fun(parentId);};

区域IsCheck固定为false,通过判断筛选后的数据有无 设备子级 再进行筛选
搜索IsCheck === true

 /*** 获取IsCheck === true设备父级* @param list 数据* @param parentId 父id* @returns*/const getTreeBind = (list: any[], parentId: any) => {let b: any[] = [];let fun = (parentId: any) => {let parent = parentId ? parentId : "#";for (let i in list) {let item = list[i];if (parent === item.id) {if (item.parent !== "#") {b.push(item.id);fun(item.parent);} else {b.push(item.id);}}}return b;};return fun(parentId);};
//扁平化数据
let cloneData=getArray(tree)let data: any[] = [];let meter: any[] = [];let data2 = cloneData;let data1 = data2.filter((item) => {// 判断文字if (item.modeltype === "area") {return item.IsCheck === false;} else {return item.IsCheck === true;}});data1.forEach((item) => {if (item.modeltype !== "area") {meter.push(item.id);if (item.parent !== "#") {//搜索父级 getTreeBindlet filterData = getTreeBind(data1, item.parent);meter = concat(meter, filterData);}}});data1 = data1.filter((item) => {return meter.includes(item.id);});if (data1.length !== 0) {data = getTree(data1, "#");}

小结

提示:总结
1、模糊搜索
2、根据需求进行数据处理

这篇关于tree 树形数据,扁平化数组,数组转树形结构父子级数据,模糊搜索,筛选的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758647

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu1011(背包树形DP)

没有完全理解这题, m个人,攻打一个map,map的入口是1,在攻打某个结点之前要先攻打其他一个结点 dp[i][j]表示m个人攻打以第i个结点为根节点的子树得到的最优解 状态转移dp[i][ j ] = max(dp[i][j], dp[i][k]+dp[t][j-k]),其中t是i结点的子节点 代码如下: #include<iostream>#include<algorithm