仅匹配树的最后一级
export function rebuildTree(keyWord, arr) {
if (!arr) {
return []
}
let newarr = []
arr.forEach((node) => {
const keyReg = new RegExp(keyWord.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i')
const matchedChildren = rebuildTree(keyWord, node.child)
if (keyReg.test(node.name)) {
if (matchedChildren.length === 0 && node.child.length === 0) {
const obj = {
...node,
child: matchedChildren,
};
newarr.push(obj);
}
}
if (matchedChildren.length > 0) {
const obj = {
...node,
child: matchedChildren,
};
newarr.push(obj);
}
})
return newarr
}
树的每一级都匹配
export function rebuildTree(keyWord, arr) {
if (!Array.isArray(arr)) {
return []
}
if (!keyWord) return arr
let result = []
arr.forEach((node) => {
const matchedChildren = node.child ? rebuildTree(keyWord, node.child) : [];
if (node.name.toLowerCase().includes(keyWord.toLowerCase())) {
result.push({ ...node });
} else if (matchedChildren.length > 0) {
result.push({
...node,
child: matchedChildren
});
}
})
return result
}
匹配文字有两种方式
const keyReg = new RegExp(keyWord.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i')
keyReg.test(node.name)
name.toLowerCase().includes(keyWord.toLowerCase())