javascript递归生成树

我现在有几个对象

 var a = {
        id:3,
        child:1
 };
  var b = {
        id:6,
        child:3
 };
  var c = {
        id:3,
        child:2
 };
  var d = {
        id:5,
        child:4
 }
  var e = {
        id:6,
        child:5
 }

想通过这些关系构造一个树状关系,不一定是二叉树,对象数量不确定,但是有类似上面的关系
请问怎么实现

var dataArry = [{id: 3, child: 1}, {id: 6, child: 3}, {id: 3, child: 2}, {id: 5, child: 4}, {id: 6, child: 5}];
var len = dataArry.length;
var flagArr = [];//记录数组中已经是别人儿子的元素的小标,因为只可能是一个元素的儿子,所有不用担心重复,除非数据本身有问题
//双层遍历对比所有的元素,看看一个元素是否是别人的儿子
for (var i = 0; i < len; i++) {
for (var j = i; j < len; j++) {
if (dataArry[i].id == dataArry[j].child) {
if (!dataArry[j].childs) {
dataArry[j].childs = [];
}
dataArry[j].childs.push(dataArry[i]);
flagArr.push(i);
}
if (dataArry[j].id == dataArry[i].child) {
if (!dataArry[i].childs) {
dataArry[i].childs = [];
}
dataArry[i].childs.push(dataArry[j]);
flagArr.push(j);//记录下已经成为别人儿子的元素
}
}
};
function sortNumber(a, b) {
return a - b
}
//将数组排序
flagArr=flagArr.sort(sortNumber);
//将这些已经变成别人儿子的元素从数组中删除,剩下的便是树
for(var i=flagArr.length-1;i>=0;i--){
flagArr[i];
dataArry.splice(flagArr[i],1);
}
console.log(dataArry);

效果就是这个样子图片说明

var dataArry = [{id: 3, child: 1}, {id: 6, child: 3}, {id: 3, child: 2}, {id: 5, child: 4}, {id: 6, child: 5}];
var len = dataArry.length;
var flagArr = [];//记录数组中已经是别人儿子的元素的小标,因为只可能是一个元素的儿子,所有不用担心重复,除非数据本身有问题
//双层遍历对比所有的元素,看看一个元素是否是别人的儿子
for (var i = 0; i < len; i++) {
for (var j = i; j < len; j++) {
if (dataArry[i].id == dataArry[j].child) {
if (!dataArry[j].childs) {
dataArry[j].childs = [];
}
dataArry[j].childs.push(dataArry[i]);
flagArr.push(i);
}
if (dataArry[j].id == dataArry[i].child) {
if (!dataArry[i].childs) {
dataArry[i].childs = [];
}
dataArry[i].childs.push(dataArry[j]);
flagArr.push(j);//记录下已经成为别人儿子的元素
}
}
};
function sortNumber(a, b) {
return a - b
}
//将数组排序
flagArr=flagArr.sort(sortNumber);
//将这些已经变成别人儿子的元素从数组中删除,剩下的便是树
for(var i=flagArr.length-1;i>=0;i--){
flagArr[i];
dataArry.splice(flagArr[i],1);
}
console.log(dataArry);