背景描述:如下数据结构,要实现一个函数,传入一个数组,找到所有父级的id并输出,目前提供了两种实现方式,支持多级子级数据结构
一、队列方式(利用一个空数组,把children级的数据push到空数组中,每次循环取出数组中第一个数据进行处理)
二、递归实现(循环到有children的,递归调用自己)
const data = [
{
id: '1', // parendId
name: 'test1',
children: [
{
id: '11', // parendId
name: 'test11',
children: [
{
id: '111',
name: 'test111'
},
{
id: '112',
name: 'test112'
}
]
},
{
id: '12', // parendId
name: 'test12',
children: [
{
id: '121',
name: 'test121'
},
{
id: '122',
name: 'test122'
}
]
}
]
},
{
id: '9', // parendId
name: 'test1',
children: [
{
id: '91', // parendId
name: 'test11',
children: [
{
id: '911',
name: 'test111'
},
{
id: '912',
name: 'test112'
}
]
},
{
id: '99', // parendId
name: 'test12',
children: [
{
id: '921',
name: 'test121'
},
{
id: '922',
name: 'test122'
}
]
}
]
}
];
一、队列方式
function findAllParentId(data){
let queue = [...data]
let res = []
while (queue.length) {
let node = queue.shift()
if (node.children) {
for (let child of node.children) {
queue.push(child)
}
res.push(node.id)
}
}
return res
}
console.log('findAllParentId', findAllParentId(data))
二、递归遍历
function find(data){
let res = []
for(let i in data){
const child = data[i].children
if(child){
for(let k of child){
res.push(k.id)
find(k.children)
}
res.push(data[i].id)
}
}
return res
}
console.log('data', find(data))