我有一个函数,该函数生成一个深度和节点参数中子级数的对象。
问题是如何编写一个函数来按名称搜索树中的元素?
我试图使它像这样(下面的代码),但它没有输入子节点
const searchByName = (searchValue) => {
for (let key in completeTree) {
if(key.name === searchValue){
return true
}
}
}
console.log(searchByName("namesurname"))
可以使用如下所示的递归函数,因为您的代码每次都会生成名称,因此请多次运行它以查看找到和未找到的结果:
请注意,我在您的代码中更改了名称生成字符串。
const getRandomInt = (max) => {
return Math.floor(Math.random() * Math.floor(max));
}
function getRandomIdentifier() {
return Math.floor(Math.random() * Math.floor(70));
}
const generateName = (names) => {
let first = getRandomInt(names.length)
let second = getRandomInt(names.length)
return names[first] + names[second]
}
const generateTree = (depth, level, names) => {
let dateOptions = {
day: "numeric",
month: "numeric",
year: "numeric",
hour: "numeric",
minute: "numeric",
millisecond: "numeric" //millisecond
}
let date = new Date()
let node = {
name: generateName(names),
id: getRandomIdentifier(), //unique
modificationDate: date.toLocaleString('ru', dateOptions),
type: "folder",
children: []
}
if (depth > 0) {
for (let i = 0; i < level; i++) {
node.children.push(generateTree(depth - 1, level, names));
}
} else {
node.type = "file"
}
return node
}
let completeTree = generateTree(1, 5, ['aaa', 'bbb', 'ccc'])
//recursive function like below can search in a tree of given structure
function searchByName(searchFor,currentNode){
let result = "not found";
if(currentNode.name.indexOf(searchFor)!=-1){
//found
result = currentNode;
}
if(currentNode.children.length>0){
for(let i=0; i<currentNode.children.length; i++){
result = searchByName(searchFor,currentNode.children[i]);
if(result!="not found"){
break;
}
}
}
return result;
}
console.log("Generated Tree:");
console.log(completeTree);
console.log("Search Result for bbbbbb:");
console.log(searchByName('bbbbbb',completeTree));
console.log("Search Result for aaabbb:");
console.log(searchByName('aaabbb',completeTree));
console.log("Search Result for aaaccc:");
console.log(searchByName('aaaccc',completeTree));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句