美文网首页基础前端
如何手写 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