一道面试:扁平化数组 [1,[2],[3, [4,5]]] ?

108 阅读1分钟

很无力,很多时候!卷的太厉害。

第一种:Array.flat(Infinity)

作死打法,一开口,估计面试官就会想,就这,只会这儿?

    const flatArray = arr => {
        return arr.flat(Infinity);
    }

跑下测试:

test1.png

第二种:递归

常规手段!什么叫递归?(别问,我不想说,凭什么什么都要问)。

    const flatArray = arr => {
        let ret = [];
        arr.forEach(item => {
            if (Array.isArray(item)) {
                ret = ret.concat(flatArray(item));
            } else {
                ret.push(item);
            }
        });
        return ret;
    }

Test:

test2.png

第三种:Stack

栈,一个字。

    const flatArray = arr => {
        const ret = [];
        let stack = [...arr]
        while (stack.length) {
            const item = stack.pop();
            if (Array.isArray(item)) {
                stack.push(...item);
            } else {
                ret.unshift(item);
            }
        }
        return ret;
    }

Test:

test3.png

第四种

你以为就结束了!?

后退,我要开始装 * 了!

    const flatArray = arr => {
        return arr.toString().split(',').map(num => +num);
    }

Test:

test4.png

给你个大嘴巴子!

 ________________
< '信不信我弄你' >
 ----------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

我:你又没给别的数据结构!!!!我不可以这样写?