为了账号安全,请及时绑定邮箱和手机立即绑定

数据排序问题

数据排序问题

泛舟湖上清波郎朗 2018-12-20 18:14:38
后端返回的一组对象数组,对象关键字段有Id,parentId,level层级, 上一层的id对应下一层的ParentId,返回的排列方式是12223333333334444,(数字代表层级),现在要把它处理成123333442333344 这种排序方式,要怎么做可能没描述清楚,现在的数组是如下的方式[{Id:10,parentId: -1,level: 1},{Id:101,parentId: 10,level: 2},{Id:102,parentId: 10,level: 2},{Id:103,parentId: 10,level: 2},{Id:111,parentId: 101,level: 3},{Id:112,parentId: 101,level: 3},{Id:121,parentId: 102,level: 3},{Id:1001,parentId: 121,level: 4}]期望排序结果是:[{Id:10,parentId: -1,level: 1},{Id:101,parentId: 10,level: 2},    {Id:111,parentId: 101,level: 3},    {Id:112,parentId: 101,level: 3},{Id:102,parentId: 10,level: 2},    {Id:121,parentId: 102,level: 3},        {Id:1001,parentId: 121,level: 4},{Id:103,parentId: 10,level: 2}]最终的结果是根据parentId 和 Id 形成一个tree形式的数据
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

递归构建tree即可:


    var list = [{ Id: 10, parentId: -1, level: 1 }, { Id: 101, parentId: 10, level: 2 }, { Id: 102, parentId: 10, level: 2 }, { Id: 103, parentId: 10, level: 2 }, { Id: 111, parentId: 101, level: 3 }, { Id: 112, parentId: 101, level: 3 }, { Id: 121, parentId: 102, level: 3 }, { Id: 1001, parentId: 121, level: 4 }]

    var arr = [];

    function sortToGetTree(list, pid) {

        if (list != null) {

            for (var i = 0; i < list.length; i++) {

                if (list[i].parentId == pid) {

                    arr.push(list[i]);

                    sortToGetTree(list, list[i].Id);

                }

            }

        }

        return ;

    }

    sortToGetTree(list,list[0].Id);

    console.log(arr);

结果:

https://img1.sycdn.imooc.com//5c4822500001e1f403120175.jpg

查看完整回答
反对 回复 2019-01-23
  • 1 回答
  • 0 关注
  • 375 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信