以下是一个遍历包含普通值、对象和数组形式属性的树的递归解决方法的示例代码:
function traverseTree(tree) {
// 检查树是否为对象
if (typeof tree === 'object' && tree !== null) {
// 遍历树的所有属性
for (const key in tree) {
// 检查属性是否为普通值
if (typeof tree[key] !== 'object' || tree[key] === null || Array.isArray(tree[key])) {
console.log(key + ': ' + tree[key]);
}
// 检查属性是否为对象
else if (typeof tree[key] === 'object' && tree[key] !== null && !Array.isArray(tree[key])) {
console.log(key + ':');
// 递归调用遍历函数
traverseTree(tree[key]);
}
// 检查属性是否为数组
else if (Array.isArray(tree[key])) {
console.log(key + ':');
// 遍历数组的每个元素
for (let i = 0; i < tree[key].length; i++) {
// 检查数组元素是否为普通值
if (typeof tree[key][i] !== 'object' || tree[key][i] === null) {
console.log(i + ': ' + tree[key][i]);
}
// 检查数组元素是否为对象
else if (typeof tree[key][i] === 'object' && tree[key][i] !== null) {
console.log(i + ':');
// 递归调用遍历函数
traverseTree(tree[key][i]);
}
}
}
}
}
}
// 示例树
const tree = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
country: 'USA'
},
hobbies: ['reading', 'traveling', 'sports']
};
// 调用遍历函数
traverseTree(tree);
这个示例代码可以遍历包含普通值、对象和数组形式属性的树,并在控制台输出每个属性的键和值。对于对象属性,会递归调用遍历函数以处理嵌套的属性。对于数组属性,会遍历数组的每个元素,并对每个元素进行相同的处理。