以下是一个树形菜单,求出年龄最大的那一位和年龄最小的哪一位
let tree = {
name: '老板',
age: 46,
children: [
{
name: '经理1',
age: 36,
children: [
{
name: '主管1',
age: 25,
children: [
{
name: '员工1',
age: 20,
children: []
},
{
name: '员工2',
age: 18,
children: []
},
{
name: '员工3',
age: 23,
children: []
}
]
},
{
name: '主管2',
age: 30,
children: []
}
]
},
{
name: '经理2',
age: 38,
children: []
},
{
name: '经理3',
age: 48,
children: []
},
]
}
在写之前先把思路想好,个人思路是:是将每一项的数据都放在一个数组中,然后用排序对数组进行操作,之后就求出最大和最小的数据。
代码如下
//首先先创建一个空数组,用来存放每一位人员的数据
let ageArr = [];
//递归将每一个人员的数据添加到数组中
function getMaxAge(tree){
//首先来判断传来的数据是不是对象如果是就push进数组
if(Object.prototype.toString.call(tree) === '[object Object]'){
ageArr.push(tree)
}
//接着来判断children是否有数据,如果有就循环children调用getMaxAge
if(tree?.children.length){
tree.children.forEach(item => {
getMaxAge(item)
})
}
}
//调用方法
getMaxAge(tree)
//此时ageArr数组里面存储的是每一位人员的数据,用年龄进行从小到大排序
let newAge = ageArr.sort((a, b) => a.age - b.age)
//排序完成,就可以打印了
console.log(`最大年龄是${newAge[newAge.length - 1].name}, ta的年龄是${newAge[newAge.length - 1].age}`);
console.log(`最小年龄是${newAge[0].name}, ta的年龄是${newAge[0].age}`);