// 原始数据let dataSource = [    { id: 1, pid: 0, name: '一级菜单A' },    { id: 2, pid: 0, name: '一级菜单B' },    { id: 3, pid: 0, name: '一级菜单C' },    { id: 4, pid: 1, name: '二级菜单A-A' },    { id: 5, pid: 1, name: '二级菜单A-B' },    { id: 6, pid: 2, name: '二级菜单B-B' },    { id: 7, pid: 2, name: '二级菜单B-C' },    { id: 8, pid: 6, name: '三级菜单B-B-A' },    { id: 9, pid: 6, name: '三级菜单B-B-B' },];/** * [将数组格式化为树型构造] * @param  {[type]} dataSource    [原始数据] * @param  {[type]} id_key        [主key] * @param  {[type]} parrentId_key [父key] * @return {[type]}               [格式化后的树形数据] */const formatTreeData = (dataSource, id_key, parrentId_key) =>{    // 深度复制一份,不想用lodash的,能够用其余办法    // 深度复制是为了不想扭转原数组,如果不介意,能够间接用    // const data = lodash.cloneDeep(dataSource);    const data = JSON.parse(JSON.stringify(dataSource));    data.forEach(i =>        i.children = data.filter(j => j[parrentId_key] === i[id_key])    );    return data.filter(i =>        !data.find(j => i[parrentId_key] === j[id_key])    );};const res = formatTreeData(dataSource, "id", "pid");// res----> [>     {>         "id": 1,>         "pid": 0,>         "name": "一级菜单A",>         "children": [>             {>                 "id": 4,>                 "pid": 1,>                 "name": "二级菜单A-A",>                 "children": []>             },>             {>                 "id": 5,>                 "pid": 1,>                 "name": "二级菜单A-B",>                 "children": []>             }>         ]>     },>     {>         "id": 2,>         "pid": 0,>         "name": "一级菜单B",>         "children": [>             {>                 "id": 6,>                 "pid": 2,>                 "name": "二级菜单B-B",>                 "children": [>                     {>                         "id": 8,>                         "pid": 6,>                         "name": "三级菜单B-B-A",>                         "children": []>                     },>                     {>                         "id": 9,>                         "pid": 6,>                         "name": "三级菜单B-B-B",>                         "children": []>                     }>                 ]>             },>             {>                 "id": 7,>                 "pid": 2,>                 "name": "二级菜单B-C",>                 "children": []>             }>         ]>     },>     {>         "id": 3,>         "pid": 0,>         "name": "一级菜单C",>         "children": []>     }> ]