1.查询一个部门列表,后端返回一种tree结构,需要拿一个值去匹配tree中的value。
例子:部门名称编号value为10010230
后端返回列表:
list:[
{
"children":[
],
"label":"营业部",
"parentId":"10010000",
"value":"10010010"
},
{
"children":[
{
"children":[
],
"label":"营业二部一中心",
"parentId":"10020001",
"value":"10010021"
},
{
"children":[
],
"label":"营业二部二中心",
"parentId":"10020002",
"value":"10010022"
},
],
"label":"营业二部",
"parentId":"10020000",
"value":"10010020"
},
{
"children":[
{
"children":[
{
"children":[
],
"label":"营业三部一中心二分部",
"parentId":"10030021",
"value":"10010230"
},
],
"label":"营业三部一中心",
"parentId":"10030001",
"value":"10010031"
},
],
"label":"营业三部",
"parentId":"10030000",
"value":"10010030"
},
],
因为树形结构是层层深入的,我也不知道后端的列表会给我返回多少层级的结构,因此我使用递归的方法去循环这个tree,找到能匹配上的值返回true,否则返回false
递归代码:
function hasValue(obj: any, targetValue: any) {
for (const key in obj) {
if (obj[key] === targetValue) {
return true;
} else if (typeof obj[key] === 'object') {
if (hasValue(obj[key], targetValue)) {
return true;
}
}
}
return false;
}
将递归代码放入数组判断中
list.forEach(item => {
if (hasValue(item, value)) {
// 判断出存在相等的value 可以写相关的业务逻辑
}
});