js中数组扁平化

数组扁平化:就是将一个嵌套多层的数组转换为只有一层的数组。

实现结果:

var arr=[1,[2,[3,4]]];//偏平化后[1,2,3,4]

 1.递归:循环数组元素,如果还是一个数组,就递归调用改方法

function flatten(arr){
    var res = [];
    for(var i=0;i

2.reduce():接受一个函数作为累加器,数组中的每个值从左到右开始缩减,最终计算为一个值。

reduce():可以作为一个高阶函数,用于函数的compose。

注意:reduce()对于空数组是不会执行回调函数的。

function flatten(arr){
    return arr.reduce(function(prev,item){
        return prev.concat(Array.isArray(item)?flatten(item):item);
    },[]);
}

3.toString():如果数组元素都是数字,那么我们可以考虑使用toString方法,因为toString可以将数组中的数以逗号形式结合起来

toString之后再split,转化为数组

[1, [2, [3, 4]]].toString() // "1,2,3,4"
function flatten(arr){
    return arr.toString().split(',').map(function(item){
        return +item;
    })
}

4.es6扩展运算符

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

但是这个扩展运算符只能展开一层数组 

 

 

 

你可能感兴趣的:(js)