<script>
const tcData = [
{
id: '1000',
name: '深圳',
children: [
{
id: '1001',
name: '宝安',
children: []
},
{
id: '1002',
name: '南山',
children: [
{
id: '1012',
name: '粤海街道',
children: [
{
id: '1112',
name: '阿里中心',
children: []
},
{
id: '1212',
name: '深圳湾人才公园',
children: []
}
]
}
]
}
]
},
{
id: '2000',
name: '广州',
children: [
{
id: '2001',
name: '越秀区',
children: [
{
id: '2011',
name: '人民公园'
}
]
},
{
id: '2002',
name: '天河区',
children: []
}
]
}
];
//请实现find函数
function find(data, id) {
console.log(data, id);
// 错误示范:
// for (let i = 0; i < data.length; i++) {
// if (data[i].id && data[i].name && data[i].id == id) {
// console.log(data[i]);
// return [data[i].name, data[i].id]
// } else if (data[i].children && data[i].children.length > 0) {
// console.log(data);
// find(data[i].children, id)
// } else {
// return '未找到'
// }
// }
let res = '未找到'
function walk(data, id) {
for (var i = 0; i < data.length; i++) {
const it = data[i]
if (it.id === id) {
res = it.name
break
} else if (it.children && it.children.length > 0) {
walk(it.children, id)
}
}
}
walk(data, id)
return res
// 递归循环遍历时,递归应该包含每一轮新的遍历,而不应该一整轮遍历包含多个递归
}
// console.log(find(tcData, '1000')); // => '深圳'
console.log(find(tcData, '2001')); // => '越秀区'
// console.log(find(tcData, '1012')); // => '粤海街道'
// console.log(find(tcData, '1112')); // => '阿里中心'
// console.log(find(tcData, '1222')); // => '未找到'
</script>
递归循环遍历时,递归应该包含每一轮新的遍历,而不应该一整轮遍历包含多个递归