把树状数组在页面显示成‘/‘/‘形式,并搜索想要的值

大概思路

在Vue中,若要将树状数组以类似于文件路径的形式(即“/”分隔)显示在页面上,可以按照以下步骤操作:

首先,假设您有一个树状数组,其结构可能如下所示:

const treeData = [{name: 'root',children: [{name: 'folder1',children: [{ name: 'file1' },{ name: 'file2' },],},{name: 'folder2',children: [{ name: 'file3' },],},],},
];

接下来,在Vue组件中,您可以编写一个计算属性或方法来递归地处理这个树形结构并将其转换为包含路径的扁平数组:

<template><ul><li v-for="item in filePaths" :key="item.id">{{ item.path }}</li></ul>
</template><script>
import { ref, computed } from 'vue';export default {props: {treeData: {type: Array,required: true,},},setup(props) {// 创建一个ref来存储转换后的路径数组const filePaths = ref([]);// 计算属性或生命周期钩子中处理树形数据function flattenTree(node, path = '') {let newPath = `${path}/${node.name}`;// 将带有路径的节点加入数组filePaths.value.push({ id: node.id || node.name, path: newPath });// 如果有子节点,则递归处理if (Array.isArray(node.children)) {node.children.forEach(child => {flattenTree(child, newPath);});}}// 遍历并处理原始树形数据props.treeData.forEach(rootNode => {flattenTree(rootNode);});// 返回filePath以便在模板中使用return {filePaths,};},
};
</script>

这段代码首先定义了一个计算属性 filePaths,然后通过 flattenTree 函数递归地遍历树状数组并将每条路径添加到 filePaths 中。最后,在模板中,我们通过 v-for 指令遍历 filePaths 并显示每一条路径。这样,在页面上就会看到以 '/' 分隔的路径形式展示了树状数组的内容。当然,请确保根据实际数据结构调整 name 和 children 字段名以及 id 或任何唯一键的生成逻辑。

简写

对于Vue3,我们可以使用Composition API来实现这个功能。以下是将树状数组转换为路径并在Vue3组件中展示的示例:

<template><div><ul><li v-for="item in displayedFilePaths" :key="item.id">{{ item.path }}</li></ul></div>
</template><script setup>
import { ref, computed, onMounted } from 'vue';// 假设这是从外部获取或props传递过来的树状数据
const treeData = ref([{id: 'root',name: 'root',children: [{id: 'folder1',name: 'folder1',children: [{ id: 'file1', name: 'file1' },{ id: 'file2', name: 'file2' },],},{id: 'folder2',name: 'folder2',children: [{ id: 'file3', name: 'file3' },],},],},
]);// 存储转换后的路径数组
const displayedFilePaths = ref([]);// 用于处理树形数据的方法
function flattenTree(node, path = '/') {const newPath = `${path}/${node.name}`;displayedFilePaths.value.push({ id: node.id, path: newPath });if (Array.isArray(node.children)) {node.children.forEach(child => {flattenTree(child, newPath);});}
}// 在组件挂载后执行处理函数
onMounted(() => {treeData.value.forEach(node => {flattenTree(node);});
});
</script>

在这个例子中,我们使用了Vue3的 <script setup> 特性来简化组件脚本部分。首先,我们定义了一个名为 treeData 的响应式引用,并在组件挂载时遍历它,调用 flattenTree 方法将树状结构转换为包含路径的 displayedFilePaths 数组。然后在模板中通过 v-for 循环展示这些路径。请注意,这里假设每个节点都有一个唯一的 id 属性,实际应用中请按实际情况调整字段名。

往flattenTree传入一个值,那这值跟最后一个节点比,显示出含这值的

如果要在flattenTree函数中传入一个值,然后找到并显示包含该值的路径,可以修改flattenTree函数使其返回包含目标值的路径数组。下面是如何修改Vue3组件以实现这一需求

<template><div><ul><li v-if="matchedPaths.length > 0" v-for="item in matchedPaths" :key="item.id">{{ item.path }}</li><p v-else>未找到与{{ searchValue }}匹配的路径</p></ul></div>
</template><script setup>
import { ref, onMounted } from 'vue';const treeData = ref([...]); // 你的树状数据
const searchValue = ref(''); // 搜索值
const matchedPaths = ref([]); // 匹配的路径function flattenTree(node, path = '/', matchedList = []) {const newPath = `${path}/${node.name}`;// 如果节点名字包含了搜索值,将路径添加到匹配列表if (node.name.includes(searchValue.value)) {matchedList.push({ id: node.id, path: newPath });}if (Array.isArray(node.children)) {node.children.forEach(child => {flattenTree(child, newPath, matchedList);});}// 返回匹配列表return matchedList;
}onMounted(() => {// 当搜索值改变时,更新匹配的路径searchValue.value = '你要搜索的值'; // 替换为实际的搜索值matchedPaths.value = flattenTree(treeData.value[0]);
});// 如果需要实时搜索,可以监听searchValue的变化
watch(searchValue, newValue => {matchedPaths.value = flattenTree(treeData.value[0]);
});
</script>

现在,当向flattenTree函数传入搜索值时(这里是在onMounted期间初始化),它将返回包含目标值的路径数组。同时,通过watch侦听searchValue的变化,每当搜索值更改时,都会重新计算并显示匹配的路径。

拿到了/一/二/三 去除/变成数组拿到最后一个,拿最后一个去搜索想要的值

let str = "/一/二/三";// 将字符串分割成数组
let arr = str.split('/');// 去除首尾的空白字符串或特定字符(这里是"/")
arr = arr.filter(item => item.trim());// 获取最后一个元素
let lastElement = arr[arr.length - 1];console.log(lastElement); // 输出:"三"

这段代码首先使用split()方法按"/"将字符串分割成数组,然后使用filter()去除数组中的空元素(这里因前后都有"/",所以会出现空字符串元素),最后通过数组索引获取最后一个元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈专项测试之弱网络测试

一&#xff0e;弱网络测试背景 移动端产品的使用并非完全都是在流畅的wifi环境&#xff0c;大部分用户主要使用4G,3G,2G等网络&#xff0c;另外因为移动端产品使用的场景多变&#xff0c;如进公交&#xff0c;上地铁&#xff0c;坐电梯&#xff0c;使得弱网测试显得尤为重要。考…

QT-JSON相关API/QJsonDocument/QJsonObject

QJsonObject类的相关操作 格式化排版创建JSON对象&#xff0c;使用字符串创建JSON对象&#xff0c;使用标准JSON对象获取JSON对象中的值&#xff0c;非数组获取JSON对象中的值&#xff0c;数组 格式化排版 下面的代码将一个符合JSON格式的字符串&#xff0c;格式化成具有缩进格…

HCIA基础知识

IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手&#xff0c;四次挥手&#xff0c;报头 什么是网络&#xff1f; 由网络连接设备通过传输介质将网络终端设备连接起来&#xff0c;进行资源共享、信息传递的平台。 OSI七…

【C】函数指针 int (*addPtr)(int, int);

目录 函数指针1&#xff09;定义2&#xff09;声明和赋值3&#xff09;通过函数指针调用函数4&#xff09;用途&#xff1a;函数指针作为函数参数5&#xff09;函数名和函数指针6&#xff09;复杂一点的例子 函数指针 1&#xff09;定义 在C语言中&#xff0c;函数指针是指向…

智慧校园云桌面解决方案应用场景

​​​​​​教师办公解决方案 教师办公桌面现状 大多数学校一位教师配置一台个人计算机,实际上每位教师平时会使用到的计算机资源不超过15-20%,因此多数时间个人计算机都是处在闲置状态。教师常用的办公用机一般都使用台式机,所有的数据都存放在本地(“信息孤点”),根…

如何购买腾讯云服务器?图文教程超详细

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

​MyBatisPlus的批量插入方法saveBatch时速度缓慢​

一、场景描述 项目组在使用MyBatisPlus的批量插入方法saveBatch时速度缓慢&#xff0c;插入1w条数据&#xff0c;需要近1分钟的时间。 二、解决方案 解决方案很简单&#xff0c;在数据库配置的uri后面加上下面这个属性即可&#xff1a; urlxxxxxxxxxxxxxxxxxxxxxx?rewriteB…

2024年学鸿蒙开发就业前景怎么样?

随着科技的不断进步&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;逐渐引起了人们的关注。 2024年&#xff0c;鸿蒙开发就业前景如何&#xff1f; 对于那些对鸿蒙开发感兴趣并希望在这一领域寻找职业发展的人来说&#xff0c;这是一个非常重要的问题。 首先&a…

【cuda】三、矩阵相乘与coalescing writes(合并写操作)

Matrix Multiplication and Optimization 线程块 功能 并行执行&#xff1a;线程块是一组同时执行的线程。它们共同执行分配给它们的任务资源共享&#xff1a;线程块内的线程可以共享数据和同步执行。通过共享内存&#xff08;Shared Memory&#xff09;和同步原语&#xff…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

Python科学计算进阶:数值积分与微分求解算法应用在Python

在Python中进行科学计算时&#xff0c;数值积分和微分是非常常见的操作。下面我将介绍几种常用的数值积分和微分求解算法&#xff0c;并给出Python代码示例。 一、数值积分 矩形法 矩形法是一种简单的数值积分方法&#xff0c;它使用矩形近似代替被积函数。这种方法虽然简单&a…

利用淘宝/天猫API实现商品数据的实时获取、处理与分析

随着电子商务的飞速发展&#xff0c;对电商平台的数据需求越来越高。对于商家而言&#xff0c;实时获取商品数据是关键。淘宝和天猫作为中国最大的电商平台&#xff0c;提供了丰富的API接口&#xff0c;其中包括按关键字搜索商品API。本文将详细介绍如何使用淘宝/天猫提供的API…

【SpringMVC】—— 如何配置使用SpringMVC(详细步骤)

目录 引言 使用 1、新建模块 2、导入坐标 3、创建SpringMVC控制器类 4、初始化SpringMVC环境 5、初始化Servlet容器&#xff0c;加载SpringMVC环境 6、配置运行 引言 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架&#xff0c;SpringMVC是表现层(web层)的框架,也…

.Net6使用SignalR实现前后端实时通信

代码部分 后端代码 &#xff08;Asp.net core web api&#xff0c;用的.net6&#xff09;Program.cs 代码运行逻辑&#xff1a; ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库&#xff1a;跳转 当前分支&#xff1a;05 一、自定义指令 自定义指令是Vue.js框架提供的…

揭秘返利机器人的工作原理与实现思路

揭秘返利机器人的工作原理与实现思路 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将为你揭示返利机器人的工作原理与实现思路&#xff0c;让你…

基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的善筹网(众筹网-有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

人生当努力

"认定一个目标,便专心致志地向那里走,其余一切都置之度外,这是成功的秘诀,也是免除烦恼的秘诀"—朱光潜 最近有和亲友讨论是否要和别人比,是否要赢的问题.我觉得需要.软弱,实力弱的人才不去比较.如果不和别人比,你如何知自己差在哪儿?连差距都不知,又如何进步.不是…

Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)

文章目录 一、Vuex1&#xff09;理解vuex2&#xff09;优点3&#xff09;何时使用&#xff1f;4&#xff09;使用步骤① 安装vuex② 注册vuex③ 引用vuex④ 创建仓库Store五个模块介绍 5&#xff09;基本使用 二、Vue-router三、LocalStorage与SessionStorage、cookie的使用 一…

ChatGPT Plus 经验分享:是否值得花钱升级?

ChatGPT Plus 经验分享&#xff1a;是否值得花钱升级&#xff1f; 五星上将麦克阿瑟曾经说过&#xff1a;“在有钱与没钱面前&#xff0c;我选择了or” ChatGPT 的每月订阅方案- ChatGPT Plus 已经推出一段时间了&#xff0c;目前的费用是$20 USD / 月(约TWD 610 / 月)。 Open…