算法题(自己总结)

给定一个数组,数组记录了当前数据的ID,和后面紧邻的数据ID。对该数据进行分组,实现以下功能:
功能描述:
对数组进行分类,
如果当前数据没有被其他数据的next指向,则为一个数组的第一个数据,
如果当前数据有被其他数据的next指向,则排在next指向的后面,
其他以此类推。

const data = [
        { id: 1, next: 2 },
        { id: 3, next: 4 },
        { id: 4, next: 5 },
        { id: 5, next: 6 },
        { id: 6, next: 7 },
        { id: 7, next: 8 },
        { id: 8, next: 9 },
        { id: 2, next: 10 },
        { id: 20, next: 30 },
        { id: 30, next: 40 },
        { id: 100, next: 78 }
    ]
    function getLinks(list) {
        var arr = [...list];
        var newArr = [];

        function getLeft(val) {
            var data = []
            for(var i = 0; i < arr.length; i++) {
                if (val.next == arr[i].id) {
                    var value = arr[i];
                    data.push(value);
                    arr.splice(i, 1);
                    data.push(...getLeft(value));
                    break;
                }
            }
            return data;
        }

        function getRight(val) {
            var data = []
            for(var i = 0; i < arr.length; i++) {
                if (val.id == arr[i].next) {
                    var value = arr[i];
                    data.unshift(value);
                    arr.splice(i, 1);
                    data.unshift(...getRight(value))
                    break;
                }
            }
            return data;
        }

        while(arr[0]) {
            var value = arr[0];
            arr.splice(0, 1);
            const left = getLeft(value);
            const right = getRight(value);
            newArr.push([...left, value, ...right])
        }

        return newArr;
    }


    
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值