使用递归遍历树形结构的数据,并根据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查询返回对应的数据的主要内容,如果未能解决你的问题,请参考以下文章