帮同事解决的需求,根据搜索值返回有搜索值的树结构
searchTreeData (originTreeData, searchValue) {
if (!searchValue) {
this.$set(this, 'dataDepartSet', originTreeData);
return;
}
const treeData = JSON.parse(JSON.stringify(originTreeData));
const searhTree = Array.from({ length: treeData.length });
function changeTreeBySearch (data, key) {
data.forEach((e, index) => {
const treeIndex = key ? `${key}-${index}` : String(index);
if (~e.title.indexOf(searchValue)) {
const indexs = treeIndex.split('-');
let count = 0;
changeSearchTree(searhTree, treeData);
function changeSearchTree (item, originItem) {
const searchIndex = indexs[count];
console.log(item, originItem, indexs, searchIndex, 8787);
if (!item[searchIndex]) {
item[searchIndex] = {
title: originItem[searchIndex].title,
expand: true
};
if (originItem[searchIndex].children) {
item[searchIndex].children = Array.from({ length: originItem[searchIndex].children.length });
}
}
++count;
if (item[searchIndex].children && item[searchIndex].children.length && indexs.length > count) {
changeSearchTree(item[searchIndex].children, originItem[searchIndex].children);
}
}
}
e.children && changeTreeBySearch(e.children, treeIndex);
});
}
changeTreeBySearch(treeData);
function dfsClearUndefined (data, key) {
for (let i = data.length - 1; i >= 0; --i) {
if (!data[i]) {
data.splice(i, 1);
} else {
data[i].children && dfsClearUndefined(data[i].children);
}
}
}
dfsClearUndefined(searhTree);
this.$set(this, 'dataDepartSet', JSON.parse(JSON.stringify(searhTree)));
}
面试深信服写的搜索树
function filter (tree, str) {
const newTree = [];
tree.forEach(val => {
if (~val.name.indexOf(str)) {
newTree.push(val)
} else {
const children = filter(val.children || [], str)
if (children.length) {
newTree.push({ ...val, children })
}
}
})
return newTree;
}