树形结构数据,进行搜索功能,保留父级节点

本文介绍了在处理大量或复杂树形结构数据时,如何设计一个实用的过滤方法,通过map复制数据确保不修改原始数据,实现输入内容实时过滤并保持父节点数据。作者分享了基于input事件监听和节点匹配的具体实现细节。
摘要由CSDN通过智能技术生成

实际应用中,树形结构数据存在数据量大或者结构复杂时,会有搜索功能的需求。输入内容实时过滤数据并渲染,还需要保留树形结构,根据搜索内容保留父节点数据。一开始思路不开阔,想逐层遍历 ,保留各层级内容。但是细想这种方式不够实用,也不灵活,不具备复用功能,也不是一个成熟程序员该用的正确方式。因此开阔思路后,最终实现了需要的功能,并且实用。

1、整体一个过滤方法,接受两个参数,一个树数据,一个方法(该方法通过搜索输入的内容进行节点匹配)。

2、过滤方法中,需要先用map复制一下数据,避免修改到原始的树数据

具体实现如下:

(1)、// 监听input事件,输入和改变
		$('#searchMenu').on('input change', function(){
			// 判断是否是谷歌浏览器
			if(!inputFocus){
				let newMenus = treeFilter(menuList, filterNode);
				drawMenu(newMenus);
				inputFilter = true;
			}

		})
(2)、
// 过滤方法
function treeFilter (tree, func) {
		// 使用map复制一下节点,避免修改到原树
		return tree.map(node => ({ ...node })).filter(node => {
			node.childMenus = node.childMenus && treeFilter(node.childMenus, func)
			return func(node) || (node.childMenus && node.childMenus.length)
		})
	}
	/**
	 * 对树节点进行筛选
	 */
	function filterNode(node) {
		let text = $('#searchMenu').val();
		if (!text) return true;
		return node['text'].indexOf(text) !== -1;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值