前端面试题-数组按层级输出

这是群里一个朋友发的,好像是他去阿里的面试题。我捉摸了一把,用静态语言写确实不太友好。所以用JS写了一把,实现了效果,但是个人其实不喜欢递归,因为总觉得会栈溢出。
先放一个递归写法:

/**
 * [[1], [3, 2, 'a'], ['x', 'y', 5]]
 * @param arr
 */
function parseArrayLevels(arr) {
    let result = []
    let f = (deep, e) => {
        if (result.length <= deep) {
            result.push([])
        }
        if (Array.isArray(e)) {
            e.forEach(a => {
                f(deep + 1, a)
            })
        } else {
            result[deep].push(e)
        }
    }
    arr.forEach(e => f(0, e))
    return result
}

console.log(parseArrayLevels([1, [3, ["x", "y"], 2] , [[5], "a"]]));

至于非递归,应该要借助另一个集合,空间复杂度高一些。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容