SOURCE

// 数组转tree
function composeTree(list = []) {
  const data = JSON.parse(JSON.stringify(list)) // 浅拷贝不改变源数据
  const result = []
  if (!Array.isArray(data)) {
    return result
  }
  data.forEach(item => {
    delete item.children
  })
  const map = {}
  data.forEach(item => {
    map[item.id] = item
  })
  console.log(map)
  data.forEach(item => {
    const parent = map[item.pid] // const 常量对象,存储的是内存地址,类似于指针
    if (parent) {
      (parent.children || (parent.children = [])).push(item)
    } else {
      result.push(item)
    }
  })
  return result
}

var data = [
    {
        "id": 453,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "下单",
        "objectType": "/business/bank/order",
        "actionKey": "bankorder:create",
        "method": "GET",
        "remarks": "auto created",
        "pid": 445,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 446,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "对账文件管理",
        "objectType": "/admin/bindcardtollrecord",
        "actionKey": null,
        "method": "GET",
        "remarks": null,
        "pid": 0,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 457,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "前端卡片发行通知",
        "objectType": "/admin/bank/order",
        "actionKey": "admin:order:noticeCard",
        "method": "GET",
        "remarks": "auto created",
        "pid": 452,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 445,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "银行下单签约",
        "objectType": "/business/bank/order",
        "actionKey": null,
        "method": "GET",
        "remarks": null,
        "pid": 0,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 450,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "撤单",
        "objectType": "/business/bank/order",
        "actionKey": "bankorder:cancel",
        "method": "GET",
        "remarks": "auto created",
        "pid": 445,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 454,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "查询订单",
        "objectType": "/business/bank/order",
        "actionKey": "bankorder:query",
        "method": "GET",
        "remarks": "auto created",
        "pid": 445,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 456,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "单个生成快递信息",
        "objectType": "/admin/express",
        "actionKey": "admin:express:place",
        "method": "GET",
        "remarks": "auto created",
        "pid": 447,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 451,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "变更绑定信息",
        "objectType": "/business/bank/order",
        "actionKey": "bankorder:change",
        "method": "GET",
        "remarks": "auto created",
        "pid": 445,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 455,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "对账文件查询",
        "objectType": "/admin/bindcardtollrecord",
        "actionKey": "admin:bindcardtollrecord",
        "method": "GET",
        "remarks": "auto created",
        "pid": 446,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 459,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "分页查询银行推送过来的订单",
        "objectType": "/admin/bank/order",
        "actionKey": "admin:order:list",
        "method": "GET",
        "remarks": "auto created",
        "pid": 448,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 444,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "货车查询",
        "objectType": "/business/truck",
        "actionKey": null,
        "method": "GET",
        "remarks": null,
        "pid": 0,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 458,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "查询营销方案",
        "objectType": "/admin/bank/order",
        "actionKey": "admin:order:market",
        "method": "GET",
        "remarks": "auto created",
        "pid": 448,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 460,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "修改地址",
        "objectType": "/admin/bank/order",
        "actionKey": "admin:order:address",
        "method": "GET",
        "remarks": "auto created",
        "pid": 448,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 447,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "快递管理",
        "objectType": "/admin/express",
        "actionKey": null,
        "method": "GET",
        "remarks": null,
        "pid": 0,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 449,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "查询货车信息",
        "objectType": "/business/truck",
        "actionKey": "truck:info",
        "method": "GET",
        "remarks": "auto created",
        "pid": 444,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 461,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "查询银行推送过来的订单详情",
        "objectType": "/admin/bank/order",
        "actionKey": "admin:order:order",
        "method": "GET",
        "remarks": "auto created",
        "pid": 448,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 452,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "唯一性校验",
        "objectType": "/business/bank/order",
        "actionKey": "bankorder:checkVehicle",
        "method": "GET",
        "remarks": "auto created",
        "pid": 445,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    },
    {
        "id": 448,
        "createdBy": "ANONYMOUS",
        "createdDate": "2020-11-27T09:04:18",
        "lastModifiedBy": "ANONYMOUS",
        "lastModifiedDate": "2020-11-27T09:04:18",
        "name": "后台管理订单",
        "objectType": "/admin/bank/order",
        "actionKey": null,
        "method": "GET",
        "remarks": null,
        "pid": 0,
        "orderNo": null,
        "clientId": "gxetc-micro-b2bbank",
        "children": null,
        "grantOption": null
    }
]

let a = composeTree(data)
// console.log(a)
console 命令行工具 X clear

                    
>
console