Skip to content

  ES6的数组的flat方法的主要作用是进行数组降维处理。该方法返回的是一个新数组,对原数组没有影响。

方法一:reduce 与扩展运算符 ​

javascript
function flat1(arr){
    return arr.reduce((accu,cur)=>{
        return Array.isArray(cur)?[...accu,...flat1(cur)]:[...accu,cur]
    } ,[]);
}

方法二:reduce 与 concat ​

javascript
function flat2(arr){
    return arr.reduce((accu,cur)=>{
        return Array.isArray(cur)?accu.concat(flat2(cur)):accu.concat(cur);
    } ,[]);
}

方法三:循环出栈与逆序 ​

通过判断数组中最后一个元素是否数组,是的话,就继续循环取最后一个元素,直到最后一个元素不为数组为止,然后再将数组逆序放入一个新的数组。

javascript
function flat3(arr){
    let res=[];
    let cloneArr=[...arr];
    while(cloneArr.length){
        let lastEle=cloneArr.pop();
        if(Array.isArray(lastEle)){
            cloneArr.push(...lastEle);
        }else{
            res.push(lastEle);
        }
    }
    return res.reverse();
}

方法三的改进 ​

javascript
function flat3(arr){
    let res=[];
    let cloneArr=[...arr];
    while(cloneArr.length){
        let lastEle=cloneArr.pop();
        if(Array.isArray(lastEle)){
            cloneArr.push(...lastEle);
        }else{
            //此时最后一个元素不是数组了,此时已经是一维数组
            return cloneArr.concat(lastEle);
        }
    }
}

方法四:some 与 concat ​

javascript
//实现思想跟方法3差不多
function flat4(arr){
    while(arr.some(item=>Array.isArray(item))){
        arr=[].concat(...arr);
    }
    return arr;
}

评论

正在加载评论…

记录 · 实践 · 分享