手写实现数组flat展开函数

83 阅读1分钟

手写实现数组flat展开函数

Array.prototype.myFlatten = function(){
    let flatArr = [];
    for(let item of this){
        if(Array.isArray(item)){
            flatArr = flatArr.concat(item.myFlatten())
        }else{
            flatArr.push(item);
        }
    }
    return flatArr;
}
​
let testArr = [0,[1,2],[3,[4,[5,6,7,[8,9]]]],10];
console.log(testArr.myFlatten());

①Array是构造函数,Array.prototype代表构造函数产生的对象的原型,因此myFlatten通过一个数组实例调用,this指向这个数组

②跟另外一个手写函数“深层冻结"一样,数组展开也运用了简单的递归,两个函数的思路和结构基本相同,都是从左到右遍历数组,碰到符合条件的就递归

③Array.concat是新返回一个数组,不是原地操作,因此需要用flatArr接收