参考了博客https://blog.csdn.net/chern1992/article/details/102857119
let arr = [
{
name: '实验文档?',
children: [
{
name: '全景',
children: null
},
{
name: '视频',
children: null
}
]
},
{
name: '文献',
children: [
{
name: '测试',
children: null
}
]
},
{
name: '漫游',
children: null
}
];
数据结构都差不多,主要是上面作者的方法无法查到第一个节点
比如我搜"实验"关键字,用参考博客的博主的方法无法获取,于是优化了一下方法
const rebuildData = (value, arr) => {
let newarr = [];
arr.forEach(item => {
if(item.name.indexOf(value) > -1){ //优化在此处,如果最上级有关键字,就直接获取该节点所有关键字
newarr.push(item);
}else if (item.children && item.children.length) {
const ab = rebuildData(value,item.children);
const obj = {
...item,
children: ab
};
if (ab && ab.length) {
newarr.push(obj);
}
} else {
if (item.name.indexOf(value) > -1) {
newarr.push(item);
}
}
});
return newarr;
}
可以和参考博客对照着看