开发者社区 问答 正文

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
 }

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

展开
收起
小旋风柴进 2016-03-20 14:25:03 2458 分享 版权
1 条回答
写回答
取消 提交回答
  • 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);
    2019-07-17 19:09:38
    赞同 展开评论
问答分类:
问答地址: