题目要求

function convertToTree(regions, rootId = "0") {
  // TODO: 在这里写入具体的实现逻辑
  // 将平铺的结构转化为树状结构,并将 rootId 下的所有子节点数组返回
  // 如果不存在 rootId 下的子节点,则返回一个空数组
}
module.exports = convertToTree; // 检测需要,请勿删除题目链接就不放了
1.关键核心,children就是 子类pid == 父类id
function convertToTree(regions, 父类id) {
  let newArr = []    //存满足需求的值
  regions.forEach((item)=>{
    if(item.pid == rootId){    
      newArr.push(item)    //如果找到了就存起来
    }
  })                       //如果没找到就返回空数组
  return newArr
}
2.第一代由于没有父类,我们可以默认父类id为0
3.第二代开始我们让rootId等于父类id就行
function convertToTree(regions, rootId = "0") {
  let newArr = []
  regions.forEach((item)=>{
    if(item.pid == rootId){
      newArr.push(item)
      item.children = convertToTree(regions , item.id)
    }                    //将找到的值赋给子类
  })
  return newArr
}4.我们也可以使用slice过滤掉已经检测过的数组
function convertToTree(regions, rootId = "0") {
  let newArr = []
  regions.forEach((item , i)=>{
    if(item.pid == rootId){
      newArr.push(item)
      item.children = convertToTree(regions.slice(i) , item.id)
    }                    //将找到的值赋给子类
  })
  return newArr
}












![[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式](https://img-blog.csdnimg.cn/direct/38f6ea44761e4ea4988da9dbb6b53775.png)





