Array.flat 实现

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]

解法

  1. 注意第一次写上来就用了map, 是不可以的,原因是输出只有一层[ ],中间的迭代不能产生数组

Array.prototype.flat = function() {
    var arr = [];
    this.forEach((item,idx) => {
        if(Array.isArray(item)) {
            arr = arr.concat(item.flat()); //递归去处理数组元素
        } else {
            arr.push(item)   //非数组直接push进去
        }
    })
    return arr;   //递归出口
}

666的解法

仅针对面试题

Array.prototype.flat = function (){
    this.toString().split(',').map(item=> +item )
}

过程:

  1. toString方法,连接数组并返回一个字符串 '2,2,3,2,3,4'

  2. split方法分割字符串,变成数组['2','2','3','2','3','4']

  3. map方法,将string映射成为number类型2,2,3,2,3,4

最后更新于