实现一个函数 fn 找出链条中所有的父级 id

417 阅读1分钟

背景描述:如下数据结构,要实现一个函数,传入一个数组,找到所有父级的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))