美文网首页基础前端
如何手写 ES6 中的 flat 方法

如何手写 ES6 中的 flat 方法

作者: CondorHero | 来源:发表于2020-05-10 00:33 被阅读0次

    今日大事:今天的大事就是发工资了,不得不讲对发工资这件事我是百感交集,来北京工作的两家公司,都拖欠我工资,第一家直接拖欠了半年,好歹是给我了,第二家现在仲裁也是没个结果。以我惨痛的经历终于总结出来一条实用的法则。那就是如果是十号发工资,说明公司不缺钱福利啥的也没问题,如果能遇到妥妥的走了狗屎运💩,没错我现在就是😂。如果公司是十五号发虽然不能证明你的公司差基本是好不了哪里去,平时没事注意下⚠️,千万不要有拖发的情况,如果真的发生了的话,恭喜你获得跳槽涨薪的机会,不是人人都有的哟。

    回到正题:

    还记得那天中午阳光☀️明媚,有图为证:


    大中午的去那里面试,电话☎️一面的时候我是很中意面试官的,问的很多也很深,我是感觉人不错。结果当场二面的时候让我手写 flat 方法,尴了尬😅。

    flat 可以进行数组的扁平化,重要的是后面有个参数,能过只是扁平化层数还是很好用的。来看看怎么实现。

    一、如何二维数组变为一维数组

    const arr = [[0,1,2],[3,4,5,6],7,8];
    
    function _flat(argv){
        return [].concat(...argv);
    };
    console.log(_flat(arr));
    //[0, 1, 2, 3, 4, 5, 6, 7, 8]
    

    这还不是我见过的最简单的扁平化写法,我见过最简单的是这样写的,无论几层都适用:

    [[[0,1,2],[3,4,5,6],7,8] + ""]
    

    如果你知道 a = 1 = 2 = 3就会明白上面这个写法,原理都是一样的。

    二、任意层数的 flat

    const arr = [[0,[19,42,3],2],[3,4,[[9,5],10,12],6],7,8];
    
    function _flat(argv,num = 1){
        for(let i = 0;i < num;i++){
            argv = [].concat(...argv);
        };
        return argv;
    };
    console.log(_flat(arr,3));
    

    就加一个参数和一个 for 循环♻️。完整的写出来就是这样:

    const arr = [[0,[19,42,3],2],[3,4,[[9,5],10,12],6],7,8];
    
    Array.prototype._flat = function(num = 1){
        if(Array.isArray(this)){
            let _this = this;
            for(let i = 0;i < num;i++){
                _this = [].concat(..._this);
            };
            return _this;
        }
        return this;
    };
    console.log(arr._flat(3));
    

    就是那么简单完了。

    有一篇文章写的挺好:面试官连环追问:数组拍平(扁平化) flat 方法实现

    当前时间 2020年5月9日 星期六 23:30:48

    相关文章

      网友评论

        本文标题:如何手写 ES6 中的 flat 方法

        本文链接:https://www.haomeiwen.com/subject/jjurnhtx.html