let arr = [
{
name: 'root' ,
children: [
{
name: 'b',
children: [
{name: 'b-1'},
{name: 'b-2'},
]
},
{
name: 'a',
children: [
{
name: 'a-1',
children: [{
name: 'a-1-1'
}]
},
{name: 'a-2'},
]
},
]
}
]
var node = null
function search(tree, nameVal) { // 深度优先遍历递归
for (const item of tree) {
console.log(item.name)
if (item.name == nameVal) {
node = item
return
}
if (item.children){
search(item.children, nameVal)
}
}
}
// var aa= search(arr, 'a-1')
// console.log(node, 'ta')
function search2(tree, name){ // 深度优先遍历
let tack = []
let nodes = null
if(tree.length > 0) {
tack.push(tree[0])
}
while(tack.length > 0) {
let node = tack.pop()
console.log(node.name, '--------')
if(node.name == name) {
console.log(44)
nodes = node
break
}
if (node.children) {
let arr2 = node.children.map((childObj)=>{
childObj.parent = node
return childObj
})
tack.push(...arr2)
}
}
// console.log(nodes, 888)
return nodes
}
function searchPath(node){
let path = []
path.unshift(node.name)
while(node.parent) {
node = node.parent
path.unshift(node.name)
}
return path.join('--')
}
// let result = search2(arr, 'a-1-1')
// console.log(searchPath(result))
function search3 (tree, name){ // 广度优先遍历,按照层级遍历
let qunt = []
let nodes = null
if (tree.length > 0) {
qunt.push(...tree)
}
while(qunt.length>0) {
let node = qunt.shift()
console.log(node.name)
if(node.name == name) {
nodes = node
break
}
if(node.children) {
let arr2 = node.children.map((item)=>{
item.parent = node
return item
})
qunt.push(...arr2)
}
}
return nodes
}
let result = search3(arr, 'a-1')
console.log(searchPath(result))
// function ex() {
// for (const item of [1,2,3]) {
// if(item > 1) {
// console.log(item,'--------')
// return item
// break;
// }
// }
// }
// console.log(ex(), 'shenme ')