Find a js algorithm to convert the data format
						
							
var dataList = [
    {parent: "",child: "",id: 01},
    {parent: "",child: "",id: 02},
    {parent: "",child: "",id: 03},
    {parent: "",child: "",id: 04},
    {parent: "",child: "",id: 05}
]
        
var getData = [
    {
        parent: "",
        children:[
            { name: "",id: 01 },
            { name: "",id: 02 },
            { name: "",id: 03 },
        ]
    },
    {
        parent: "",
        children:[
            { name: "",id: 04 },
            { name: "",id: 05 }
        ]
    }
]
 such as the above code, how to convert dataList to getData easily and quickly? 
 Why do I think it is very complicated? it is difficult to turn around. Is it because the foundation of js is not solid? How to improve this kind of data conversion ability? Please give me some advice! 
						 
												
					 
					
						
 if there is only one layer, there are actually only two steps logically 
 1. Extract the unrepeated parent array 
 2. Match the children of the parent array 
There are many ways to implement 
. I'll provide a simple 
.
var dataList = [
  {parent: "", child: "", id: 01},
  {parent: "", child: "", id: 02},
  {parent: "", child: "", id: 03},
  {parent: "", child: "", id: 04},
  {parent: "", child: "", id: 05}
]
var getData = dataList
  .reduce((arr, {parent}) => void (!arr.includes(parent) && arr.push(parent)) || arr, [])
  .map(parent => ({
      parent,
      children: dataList.filter(v => v.parent === parent)
    }
  ))
console.log(getData)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script src="transTreeList.js"></script>
    <script>
        var aData = [
            {
                id: 1,
                text: '',
                tel: '18875011111',
                pid: 1
            },
            {
                id: 2,
                text: '',
                tel: '18875011111',
                pid: 2
            },
            {
                id: 3,
                text: '',
                tel: '18875011111',
                pid: 3
            },
            {
                id: 4,
                text: '',
                tel: '18875011111',
                pid: 4
            },
            {
                id: 5,
                text: '',
                tel: '18875011111'
            },
            {
                id: 6,
                text: '',
                pid: 3
            },
            {
                id: 7,
                text: '',
                pid: 3
            },
            {
                id: 8,
                text: '',
                pid: 4
            },
            {
                id: 9,
                text: '',
                pid: 4
            },
            {
                id: 10,
                text: '',
                pid: 4
            },
            {
                id: 11,
                text: '',
                pid: 5
            },
            {
                id: 12,
                text: '',
                pid: 5
            }
        ]
        var arr = transTreeList({
            data: aData, 
            id: 'id',
            text: 'text',
            pid: 'pid'
        });
        console.log(arr);
    </script>
</body>
</html>
// 
function transTreeList (o) {
    /*
     * 
     o.data ->                
     o.id ->             
     o.text ->         
     o.pid -> id     
     o.tId -> id         id
     o.tText -> text     text
     o.tPid -> pid       pid
     o.tChild ->     children
     */
    if ( !o.data || !o.id || !o.text || !o.pid ) {
        return false;
    }
    if ( !o.tId ) {
        o.tId = 'id';
    }
    if ( !o.tText ) {
        o.tText = 'text';
    }
    if ( !o.tPid ) {
        o.tPid = 'pid';
    }
    if ( !o.tChild ) {
        o.tChild = 'children';
    }
    try {
        var data = JSON.parse(JSON.stringify(o.data));
    } catch (error) {
        return;
    }
    
    var aNoChild = [], aData = [], aTid = [];
    // 
    // tid
    for ( var i = 0; i < data.length; iPP ) {
        var obj = data[i];
        if ( o.tId != o.id ) {
            obj[o.tId] = obj[o.id];
        }
        if ( o.tText != o.text ) {
            obj[o.tText] = obj[o.text];
        }
        if ( o.tPid != o.pid ) {
            obj[o.tPid] = obj[o.pid];
        }
        aNoChild.push(obj);
        aTid.push(obj[o.tId]);
    }
    // noLevel
    var aChild = [];
    for ( var i = 0; i < aNoChild.length; iPP ) {
        if ( aTid.indexOf(aNoChild[i][o.tPid]) == -1 || aNoChild[i][o.tPid] == aNoChild[i][o.tId] ) {
            aData.push(aNoChild[i]);
        } else {
            aChild.push(aNoChild[i]);
        }
    }
    for ( var i = 0; i < aChild.length; iPP ) {
        for ( var j = 0; j < aNoChild.length; jPP ) {
            if ( aNoChild[j][o.tId] == aChild[i][o.tPid] ) {
                if ( !(o.tChild in aNoChild[j]) ) {
                    aNoChild[j][o.tChild] = [];
                }
                aNoChild[j][o.tChild].push(aChild[i]);
            }
        }
    }
    return {
        aNoChild: aNoChild,
        aData: aData
    }
}
    look for trees and graphs. Algorithm 4 is good.