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

这篇具有很好参考价值的文章主要介绍了把树状数组在页面显示成‘/‘/‘形式,并搜索想要的值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大概思路

在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()去除数组中的空元素(这里因前后都有"/",所以会出现空字符串元素),最后通过数组索引获取最后一个元素。文章来源地址https://www.toymoban.com/news/detail-794038.html

到了这里,关于把树状数组在页面显示成‘/‘/‘形式,并搜索想要的值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解树状数组

    树状数组(BIT, Binary Indexed Tree)是简洁优美的数据结构,它能在很少的代码量下支持 单点修改 和 区间查询 ,我们先以 a[] {1, 2, 3, 4, 5, 6} 数组为例建立树状数组看一下树状数组的样子: 可以发现:不是所有节点都是连接在一起的,c[1], c[2], c[3], c[4] 和 c[5], c[6] 分别构成了两棵

    2024年02月08日
    浏览(34)
  • 树状数组笔记

    数组、前缀和、树状数组的区别:         数组:修改某点O(1),求区间O(n)         前缀和:修改某点O(n),求区间O(1)         树状数组:修改某点O(logn),求区间O(logn) 树状数组采取折中的方式,降低整体的时间复杂度。 由于算法复杂度取决于最坏的情

    2024年02月15日
    浏览(33)
  • 超详细の树状数组讲解!

    以下有错误的话欢迎指正 由于篇幅问题每道题目的代码在每一板块最后折叠给出 其实线段树能维护的东西比树状数组能维护的东西多得多,但是树状数组代码好写啊! 最为常用的树状数组,我们一般都是用这个来解决问题,二维的后面会讲。 我们在进行数列操作的时候,经

    2024年02月07日
    浏览(31)
  • 树状数组的扩展应用

    「观前提醒」 「文章仅供学习和参考,如有问题请在评论区提出」 目录 O(N) 建树 方法一 方法二 维护区间和 单点修改,区间查询 区间修改,单点查询 区间修改,区间查询 维护二维子矩阵和(二维树状数组) 单点修改,子矩阵查询 子矩阵修改,单点查询 子矩阵修改,子矩

    2024年02月15日
    浏览(30)
  • 树状数组

    「观前提醒」 「文章仅供学习和参考,如有问题请在评论区提出」 目录 定义 基本概念 基本原理 单点修改 分析 代码实现 区间查询 分析 代码实现 整体代码 练手题目 小结 参考资料 树状数组 是一种支持 单点修改 和 区间查询 的数据结构。 普通的树状数组 只能用来维护像

    2024年02月16日
    浏览(31)
  • 【学习笔记】树状数组

    树状数组是一种数据结构,普通树状数组维护的信息及运算要满足结合律且可差分。 树状数组是用长度为 (n) 的数组存储的。我们假设这个数组为 (n) ,令 lowbit(i)=i(-i) ,则 (c_i) 保存的是向前 lowbit(i) 长度的 (a) 数组区间和。 单点加:从 (i) 开始,修改所有包含 (a_i)

    2024年02月15日
    浏览(40)
  • 首页搜索框传递参数,并在搜索页面中的搜索框中进行显示,搜索框绑定回车键进行搜索

    1.写出搜索条件和搜索框 2.添加scss样式 页面 3.搜索框选择条件,在搜索框中输入内容,然后进行页面跳转 在搜索框中输入内容,然后进行页面跳转 4.页面跳转后从地址栏中获取相关数据,搜索条件和搜索框中的内容 从地址栏中获取到相关数据searchText和selectSearch的值

    2024年02月10日
    浏览(98)
  • 243. 一个简单的整数问题2(树状数组)

    输入样例: 输出样例:  解析:         一般树状数组都是单点修改、区间查询或者单点查询、区间修改。这道题都是区间操作。                    1. 区间修改用数组数组维护差分数组         2. 区间查询,需要log计算两个端点的前缀和。上图右侧,可以得出,计算

    2024年02月14日
    浏览(37)
  • 《算法竞赛进阶指南》0x42 树状数组

    题意: 二维平面给定一些点,询问 v 形和 ∧ 形数目 解析: 对于 ∧ 形: ( i , y ) (i,y) ( i , y ) ,考虑左右两侧比该点低的点的个数。树状数组查询 y j y y_j y y j ​ y 的点的个数。因为总共有 y − 1 y-1 y − 1 个点比当前点低,有 n − y n-y n − y 个点比当前点高。 v型同理。 代码

    2023年04月11日
    浏览(37)
  • java通过stream流的形式把列表中某个字段的值取出并生成列表

    可以使用Java 8中引入的Stream API来实现这一功能。例如,假设你有一个类名为Person的列表,并且你想要从这个列表中提取所有人的姓名并生成一个新的列表。你可以这样做: 这段代码首先使用 stream() 方法将列表转换为流。然后,使用 map() 方法对流中的每个元素执行一个转换函

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包