记录一下写的数组扁平化方法
因为数组可能有多层嵌套,首先想到的解决方法一定是递归实现,同对象的深拷贝;

其次实现过程中几个小问题

  1. 判断数组实例:可以用Array.isArray(param),可以用instanceof判断
  2. 合并数组:可以用数组的cancat方法实现,也可以用push+扩展运算符...实现

递归实现

// 数组扁平化
// 1.递归实现
let arr = [1,[2,3,[4,5]]];
let flatFun1 = function(arr){
    let result = [];
    arr.forEach(element => {
        if (element instanceof Array) {
            result.push(...flatFun1(element));
        } else {
            result.push(element);
        }
    });
    return result;
}
console.log(JSON.stringify(flatFun1(arr)));

递归中运用reduce累计器实现

// 2.递归使用reduce实现
let arr = [1,[2,3,[4,5]]];
let flatFun2 = function(arr){
    return arr.reduce((pre,cur) => {
        if (Array.isArray(cur)) {
            return pre.concat(flatFun2(cur));
        } else {
            return pre.concat(cur);
        }
    },[]);
}
console.log(JSON.stringify(flatFun2(arr)));

ES6自带方法

// 3.ES6自带方法flat
console.log([1,[2,3,[4,5]]].flat(Infinity));

简单介绍一下flat方法,由数组实例调用并返回一个新数组,不影响原数组,可接受一个非必须参数,无参数时默认展开一层数组,参数为需要展开的层数,全部展开可以传入Infinity作为参数


张磊
15 声望1 粉丝