使用递归遍历树形结构的数据,并根据id查询返回对应的数据

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用递归遍历树形结构的数据,并根据id查询返回对应的数据相关的知识,希望对你有一定的参考价值。


1、数据

let treeData = [{
	id: 1,
	aname: '邓稼先',
	value: '核物理学家',
	age: 1924,
	children: [{
		id: 11,
		aname: '袁隆平',
		value: '杂交水稻育种专家',
		age: 1930,
		children: []
	}]
}, 	
{
	id: 2,
	aname: '钱学森',
	value: '空气动力学家',
	age: 1991,
	children: [{
		id: 22,
		aname: '李四光',
		value: '地质学家',
		age: 1889,
		children: [{
			id: 222,
			aname: '于敏',
			value: '核物理学家',
			age: 1926,
			children: []
		}]
	}]
}, 
{
	id: 3,
	aname: '华罗庚',
	value: '数学家',
	age: 1910,
	children: [{
		id: 33,
		aname: '钱三强',
		value: '核物理学家',
		age: 1913,
		children: []
	}]
}];

2、功能函数-1

function tree(data, id) {
	for (let i = 0; i < data.length; i++) {
		let item = data[i];
		if (item.id === id) {
			return item;
		} else {
			// item.children 不等于 undefined && item.children.length 大于 0 时
			if (item.children && item.children.length > 0) {
				let res = tree(item.children, id);
				// 当 res = undefined 时不会进入判断中
                // 也就是不会return
				if (res) {
					return res;
				}
			}
		}
	}
};

3、功能函数-2

function findItemById(list, id) {
	// 每次进来使用find遍历一次
	let res = list.find((item) => item.id == id);
	if (res) {
		return res;
	} else {
		for (let i = 0; i < list.length; i++) {
			if (list[i].children instanceof Array && list[i].children.length > 0) {
				res = findItemById(list[i].children, id);
				if (res) {
					return res;
				}
			}
		}
		return null;
	}
};

4、执行函数

功能函数-1

console.log("查询结果:", tree(treeData, 11));
// 查询结果: {id: 11, aname: "袁隆平", value: "杂交水稻育种专家", age: 1930}
console.log("查询结果:", tree(treeData, 33));
// 查询结果: {id: 33, aname: "钱三强", value: "核物理学家", age: 1913, children: Array(0)}
console.log("查询结果:", tree(treeData, 3));
// 查询结果: {id: 3, aname: "华罗庚", value: "数学家", age: 1910, children: Array(1)}

功能函数-2

console.log(findItemById(treeData, 33));
// {id: 33, aname: "钱三强", value: "核物理学家", age: 1913, children: Array(0)}
console.log(findItemById(treeData, 1));
// {id: 1, aname: "邓稼先", value: "核物理学家", age: 1924, children: Array(1)}
console.log(findItemById(treeData, 222));
// {id: 222, aname: "于敏", value: "核物理学家", age: 1926, children: Array(0)}

以上是关于使用递归遍历树形结构的数据,并根据id查询返回对应的数据的主要内容,如果未能解决你的问题,请参考以下文章

js遍历树形结构并返回所有的子节点id值

mysql树形结构的查询案例

MySQL实现递归查找树形结构

树形结构根据某节点查询本节点及下属所有子节点的递归实现

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类