2 回答
TA贡献1876条经验 获得超6个赞
大概写了一下:
function compare(value, keyword){
if(value === keyword){
return 2;
}
if(new RegExp('^' + value).test(keyword)){
return 1;
}
return 0;
}
function walk(node, keyword){
let isFind = false;
const path = [];
let children = null;
function dfs(node, keyword){
if(compare(node.value, keyword) === 1){
path.push(node.value);
node.children && node.children.forEach(childNode => {
dfs(childNode, keyword);
});
}
if(compare(node.value, keyword) === 2) {
node.children && (children = node.children);
isFind = true;
}
}
dfs(node, keyword);
return {
isFind,
path,
children
}
}
function generateObj(pathArr, keyword, children){
const resObj = {};
let tempObj = resObj;
pathArr.forEach(path => {
tempObj.value = path;
tempObj.children = [{}];
tempObj = tempObj.children[0];
});
tempObj.value = keyword;
children && (tempObj.children = children);
return resObj;
}
function search(nodes, keyword){
const searchedNodes = [];
nodes.forEach(node => {
const { isFind = false, path, children = null } = walk(node, keyword);
if(isFind){
searchedNodes.push(generateObj(path, keyword, children));
}
});
return searchedNodes;
}
const nodes = [
{
value: "1-1",
children: [
{ value: "1-1-1"},
{ value: "1-1-2", children:[
{
value: "1-1-2-1",
children: [
{ value: "1-1-2-1-1" },
{ value: "1-1-2-1-2" }
]
},
{
value: "1-1-2-2"
}
] }
]
},
{
value: "1-2",
children: [
{ value: "1-2-1"},
{ value: "1-2-2", children:[
{
value: "1-2-2-1",
children: [
{ value: "1-2-2-1-1" },
{ value: "1-2-2-1-2" }
]
},
{
value: "1-2-2-2"
}
] }
]
},
];
const searchedNodes = search(nodes, "1-1-2-1");
TA贡献1856条经验 获得超11个赞
你给的期望数据和 问题描述有歧义啊,
children: [
{ value: "1-1-2-1-1" },
{ value: "1-1-2-1-2" }
]
中的{ value: "1-1-2-1-2" }也是符合1-1-2-1的啊
添加回答
举报