Js如何在原生的数组中实现扁平化函数

1、概念

数组扁平化:就是将一个多维数组变成一维数组

2、实现方式

方法1:reduce和concat方法

思想:遍历数组每一项,如果值是数组,进行递归调用

reduce方法:从数组的第一项开始,逐个遍历到最后,最终迭代数组的所有项

concat方法:将接收到的参数添加到数组的末尾

var arr=[1,[2,[3,[4,[5]]]]];
function flatten(arr) {
    return arr.reduce((result,item)=>{
        return result.concat(Array.isArray(item)?flatten(item):item);
    },[])
}
console.log(flatten(arr));

方法2:ES6扩展运算符和some方法

思想:对数组进行一次遍历,如果arr中含有数组则进行一次扩展运算符

some方法:对数组中的每一项运行给定的函数,如果该函数对任一项返回true,该方法返回值为true

扩展运算符:将一个数组转为用逗号分隔的参数序列(可以将二维数组转换为一维数组)

function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))){
        arr=[].concat(...arr);
    }
    return arr;
}
console.log(flatten(arr));

方法3:递归

思想:数组中的每一项如果是数组,进行递归调用,否则直接加入到新的数组中

function flatten(arr) {
    var result=[];
    for (var i=0;i<arr.length;i++) {
        if (Array.isArray(arr[i])){
            result=result.concat(flatten(arr[i]));
        }else{
            result.push(arr[i]);
        }
    }
    return result;
}

方法4:toString(或者join) & split

思想:用toString或者join方法将数组转变为字符串,然后,再用split方法分割还原为数组

function flatten(arr) {
    return arr.toString().split(',').map(function(item) {
        return Number(item);
    })
} 

 参考链接:https://www.cnblogs.com/wind-lanyan/p/9044130.html

原文地址:https://www.cnblogs.com/qing-5/p/12849928.html