对象数组按照指定rule对数据进行切割分层形成树形结构并支持搜索功能

server/2025/1/16 13:02:33/

根据提供的对象数组,按照rule: '5-3-3’的规则对数据进行分层,形成树形结构并支持搜索功能
数据:
dataList: [
{ id: ‘10000’, name: ‘a’ },
{ id: ‘10000001’, name: ‘a1’ },
{ id: ‘10000001001’, name: ‘a1c’ },
{ id: ‘20000’, name: ‘b’ },
{ id: ‘20000002’, name: ‘b1’ }
]

效果: 在这里插入图片描述

<template><div id="app"><!-- 搜索框 --><el-inputplaceholder="请输入搜索内容"v-model="filterText"@input="onFilterInput"clearable><template #append><el-button icon="el-icon-search"></el-button></template></el-input><!-- 树形结构 --><el-tree:data="treeData":props="defaultProps":filter-node-method="filterNode"ref="tree"@node-click="handleNodeClick"></el-tree></div>
</template><script>
export default {name: 'App',data() {return {// 动态规则,例如 "5-3-3"rule: '5-3-3',// 动态数据列表,现在是对象数组dataList: [{ id: '10000', name: 'a' },{ id: '10000001', name: 'a1' },{ id: '10000001001', name: 'a1c' },{ id: '20000', name: 'b' },{ id: '20000002', name: 'b1' }],treeData: [], // 将会填充的树形结构数据defaultProps: {children: 'children',label: 'label'},filterText: '' // 搜索关键字};},created() {this.generateTree();},methods: {generateTree() {const segments = this.rule.split('-').map(Number);const root = {};const idsToNames = new Map(this.dataList.map(item => [item.id, item.name]));this.dataList.forEach(({ id }) => {let node = root;let start = 0;for (let i = 0; i < segments.length; i++) {const end = start + segments[i];const segment = id.slice(start, end);if (!node[segment]) {node[segment] = { label: idsToNames.get(id), children: {} };}if (end === id.length) break; // 如果已经到达ID的末尾,则停止node = node[segment].children;start = end;}});function toTreeArray(node) {return Object.keys(node).map(key => ({...node[key],children: toTreeArray(node[key].children)})).filter(item => item.label !== undefined);}this.treeData = toTreeArray(root);},handleNodeClick(data) {console.log('Node clicked:', data);},onFilterInput() {this.$refs.tree.filter(this.filterText);},filterNode(value, data) {if (!value) return true;return data.label.indexOf(value) !== -1;}},watch: {// 监听规则或数据的变化以重新生成树rule: 'generateTree',dataList: {handler: 'generateTree',deep: true}}
};
</script><style>
/* 添加样式 */
</style>

http://www.ppmy.cn/server/158827.html

相关文章

分布式缓存redis

分布式缓存redis 1 redis单机&#xff08;单节点&#xff09;部署缺点 &#xff08;1&#xff09;数据丢失问题&#xff1a;redis是内存存储&#xff0c;服务重启可能会丢失数据 &#xff08;2&#xff09;并发能力问题&#xff1a;redis单节点&#xff08;单机&#xff09;部…

Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处&#xff1a;动态切换算法或行为场景&#xff1a;实现同一功能用到不同的算法时和简单工厂对比&#xff1a;简单工厂是通过参数创建对象&#xff0c;调用同一个方法&#xff08;实现细节不同&#xff09;&#xff1b;策略模式是上下文切换对象&#xff0c;调用…

CHAIN OF RESPONSIBILITY(职责链)—对象行为型模式

1. 意图 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2. 动机 考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分…

小黑工具人日常积累中:sqlserver中切割字符串,取首个子串

SELECTSUBSTRING(表名字, 1, CHARINDEX(分隔符, 字段名) - 1) AS FirstPart FROM表名字 WHERECHARINDEX(分隔符, 字段名) > 0继续尝试: 提取第二个子串 窗口函数

SOME/IP协议详解 基础解读 涵盖SOME/IP协议解析 SOME/IP通讯机制 协议特点 错误处理机制

车载以太网协议栈总共可划分为五层&#xff0c;分别为物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层&#xff0c;其中今天所要介绍的内容SOME/IP就是一种应用层协议。 SOME/IP协议内容按照AUTOSAR中的描述&#xff0c;我们可以更进一步…

【JVM-3】深入理解JVM堆内存:结构、管理与优化

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的基石&#xff0c;而堆内存&#xff08;Heap Memory&#xff09;是JVM中最重要的内存区域之一。它负责存储Java程序运行时创建的对象实例。理解JVM堆内存的结构、管理机制以及优化方法&#xff0c;对于编写高效、稳定的Ja…

37.【2】CTFHub web sql 字符型注入

进入靶场&#xff0c;按照提示输入1 对比字符型注入与整数型注入可以发现字符型注入的1被单引号包裹 所以我们要使单引号闭合&#xff0c;使语句正确 如图&#xff0c;手动输入时便输入1&#xff0c;先使得第一个单引号闭合&#xff0c;使用order by 判断字节数&#xff0c;还…