一道有关转换树形数据结构的JS面试题

请写出一个名为transTree的函数,实现如下功能

    var arr1 = [
        { level: 1 },
        { level: 2 },
        { level: 3 },
        { level: 1 }
    ];
    var arr2 = [
        { h: 2 },
        { h: 4 },
        { h: 2 },
        { h: 3 }
    ]
    var newArr1 = transTree(arr1, 'level');
    var newArr2 = transTree(arr2, 'h');

    console.log(newArr1);
    /*newArr1
    [
        {
            level: 1,
            sub: [
                {
                    level: 2,
                    sub: [
                        { level: 3 }
                    ]
                }
            ],
        },
        {
            level: 1
        }
    ]
     */

    console.log(newArr2);
    /*newArr2
    [
        {
            h: 2,
            sub: [
                { h: 4 }
            ]
        },
        {
            h: 2,
            sub: [
                { h: 3 }
            ]
        }
    ]
     */
阅读 2.2k
1 个回答

没人回答?好吧,撸一串,供参考

function transTree(list, attr) {
    var result = [];
    list.reduce(function (res, cur, index, arr) {
        var prev = res[res.length - 1];
        if (prev && cur[attr] > prev[attr]) {
            if (!prev.sub) prev.sub = [];
            prev.sub.push(cur);
            if (index === arr.length - 1) prev.sub = transTree(prev.sub, attr);
        } else {
            res.push(cur);
            if (prev && prev.sub) prev.sub = transTree(prev.sub, attr);
        }
        return res;
    }, result);
    return result;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题