树结构的数据筛选
const filters = (e: any) => {
let { value } = e.target;
let d = JSON.parse(JSON.stringify(treeDataOld));
let datax = filtersX(value, d);
setTreedata(datax);
};
const filtersX = (val: any, data: Array<any>) => {
data.forEach((item: any) => {
if (item.children && item.children.length) {
item.children = (item.children || []).filter((x: any) => {
if (x.children && x.children.length) {
return x.children
.map((a: any) => a.name)
.toString()
.includes(val);
}
return x.name.indexOf(val) !== -1;
});
filtersX(val, item.children);
}
});
return data;
};
效果图

从树结构的数据里查找某一个
const finditem = (arr: Array<any>, key: string) => {
let obj = "";
finditemx(arr, key);
return obj;
function finditemx(arr: Array<any>, key: string) {
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (item.key === key) {
obj = item;
break;
}
if (item.children) {
finditemx(item.children, key);
}
}
}
};
从树型数据中把所有的子节点取出来
function loop(data: Array<any>) {
let temp: Array<any> = [];
loopx(data);
return temp;
function loopx(data: Array<any>) {
if (Array.isArray(data)) {
data.forEach((item) => {
if (item.children && item.children.length) {
loopx(item.children);
} else {
temp.push(item);
}
});
}
}
}