先定义一组树形列表数据
规定:树的最后一级 member 为空的即为成员
const memberList = [{
name: '研发部',
member: [{
name: '前端',
member: [{
name: '张三',
age: 18,
member: []
}]
},
{
name: '后端',
member: [{
name: '李四',
age: 24,
member: []
}]
}
]
},
{
name: '市场部',
member: [{
name: '主管',
member: [{
name: '王五',
age: 30,
member: []
}]
},
{
name: '经理',
member: [{
name: '老六',
age: 28,
member: []
}]
}
]
}
];
< 一 >递归获取全部成员
获取到该树形列表下的所有成员,并放入数组中返回
const getAllMember = (arr) => {
let member = [];
arr.forEach(item => {
if (item.member && item.member.length) {
member = [
...member,
...getAllMember(item.member)
]
} else {
member.push(item.name);
}
});
return member;
}
调用结果
< 二 >递归筛选满足条件的成员
定义一个 key 作条件,过滤掉不满足该条件的数据,将满足条件的数据以原树形格式返回
const filterMember = (key, data) => {
const filterList = [];
data.forEach((ele) => {
const { member, ...other } = ele;
if (member && member.length) {
const currentEle = {
member: [],
...other
};
const result = filterMember(key, member);
if (result.length) {
currentEle.member = result;
filterList.push(currentEle);
}
} else if (other.age > key) {
filterList.push(other);
}
});
return filterList;
}
调用结果(过滤掉小于20 岁的成员)