el-table 树形数据的过滤

该篇文章详细描述了一个名为`filterTree`的函数,用于在树形数据结构中根据给定的过滤值(filterValues)递归地筛选节点,包括其父节点。它检查节点值是否包含过滤值并决定是否保留节点及其子节点。
摘要由CSDN通过智能技术生成

 树形数据的过滤:返回包含所需的要素以及其父节点。

filterTree(treeData, filterValues) {

            function filterRecursive(node, parentIncluded) {

                // 如果节点是数组,则对每个元素应用过滤逻辑

                if (Array.isArray(node)) {

                    const filteredArray = node.map((child) => filterRecursive(child, parentIncluded))

                    return filteredArray.filter((child) => child !== null)

                }

                // 检查当前节点的值是否包含任何过滤值

                const valueContainsFilter = filterValues.some((filter) => node.value.indexOf(filter) !== -1)

                const includeNode = parentIncluded || valueContainsFilter

                const filteredChildren = node.children ? filterRecursive(node.children, includeNode) : []

                return includeNode || filteredChildren.length > 0 ? { ...node, children: filteredChildren } : null

            }

            const filteredTree = filterRecursive(treeData, false)

            const cleanFilteredTree = JSON.parse(JSON.stringify(filteredTree))

            return cleanFilteredTree

        },

filterValues是一个数组,包含过滤的要素。 

const valueContainsFilter = filterValues.some((filter) => node.value.indexOf(filter)

这里可以根据你需要的条件进行修改。

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个使用 el-table 实现树形数据的简单示例: ```html <template> <el-table :data="tableData" :row-key="getRowKey" style="width: 100%"> <el-table-column type="expand"> <template slot-scope="props"> <el-table :data="props.row.children"> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </template> </el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: "父节点1", age: 30, children: [ { name: "子节点1", age: 20 }, { name: "子节点2", age: 25 } ] }, { name: "父节点2", age: 35, children: [ { name: "子节点3", age: 28 }, { name: "子节点4", age: 32, children: [ { name: "孙子节点1", age: 5 }, { name: "孙子节点2", age: 3 } ] } ] } ] }; }, methods: { getRowKey(row) { return row.name; // 使用每一行的名称作为唯一标识符 } } }; </script> ``` 上面的示例,我们使用嵌套的 el-table 组件来展示树形数据。在父节点的行上,我们使用了 `type="expand"` 的 el-table-column 组件,并在其 slot 渲染了另一个 el-table 组件,用来展示该父节点的子节点数据。 在子节点的行上,由于没有子节点,因此不会再次渲染 el-table 组件。我们可以通过在 `getRowKey` 方法指定一个唯一标识符来确保每一行都有一个唯一的 key 值,这样可以帮助 Vue 在渲染时更加高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xren-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值