SOURCE

 var arr = [
    { id: 102, pid: 1},
    { id: 103, pid: 1},
    { id: 104, pid: 3},   //根节点3
    { id: 10002, pid: 102},
    { id: 1, pid: 0},     //根节点0
]

function getTree(data, root, idTxt, pidTxt, pushTxt) {
    var idTxt = idTxt || 'id';
    var pidTxt = pidTxt || 'pid';
    var pushTxt = pushTxt || 'children';
    // 递归方法
    function getNode(id) {
        var node = []
        for (var i = 0; i < data.length; i++) {
            if (data[i][pidTxt] == id) {
                data[i][pushTxt] = getNode(data[i][idTxt])
                node.push(data[i])
            }
        }
        if (node.length == 0) {
            return
        } else {
            return node
        }
    }
    // 使用根节点
    return getNode(root)
}


var str = JSON.stringify(getTree(arr,0))
console.log(str)
console 命令行工具 X clear

                    
>
console