1、树形结构递归通过id找到对应label:
export function findTreeItem(table, id, key = 'id') {
let hasFound = false // 表示是否有找到id值
let result = null
const fn = function(data) {
if (Array.isArray(data) && !hasFound) {
console.log('是数组')
// 判断是否是数组并且没有的情况下
data.some(item => { //使用some替换forEach,forEach无法终止循环
if (data.find(item => item[key] == id)) { //不能使用if item[key]==id),否则for循环执行完之后才能进入if语句。
// 数据循环每个子项,并且判断子项下边是否有id值
result = data.find(item => item[key] == id) //find返回的是符合条件的数据,而不是true或者false
// 返回的结果等于每一项 console.log(result)
hasFound = true // 并且找到id值
return true //跳出循环体,终止循环。
} else if (item.children) {
fn(item.children) // 递归调用下边的子项
}
})
}
}
fn(table) // 调用一下
return result
}
注意:当有多条数据需要实现通过code查找label的时候,最好不要使用for循环,用find循环来代替,但是以上方法并不能真是实现树形查找,因为some依然无法终止循环,使用try catch(){}来终止循环,并使用for in来循环。
export function getNode(data,id){
console.log(data)
console.log(id)
let keyWord=id;
let columnDefs=data;
let res_name=''
try{
const findName=(columnDef)=>{
if(columnDef.id==keyWord){
console.log('相等')
throw columnDef;
}
if(columnDef.children && columnDef.children.length>0){
for(let i in columnDef.children){
findName(columnDef.children[i]);
}
}
}
for(let i in columnDefs){
findName(columnDefs[i])
}
}catch(name){
res_name=name
}
return res_name;
}
export function getNode(data,id){
console.log(data)
console.log(id)
let keyWord=id;
let columnDefs=data;
let res_name=''
try{
const findName=(columnDef)=>{
if(columnDef.id==keyWord){
console.log('相等')
throw columnDef;
}
if(columnDef.children && columnDef.children.length>0){
for(let i in columnDef.children){
findName(columnDef.children[i]);
}
}
}
for(let i in columnDefs){
findName(columnDefs[i])
}
}catch(name){
res_name=name
}
return res_name;
}