数组扁平化常用方法

概念

数组扁平化是指将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]]  ------>    [1, 2, 3, 4, 5]

实现

1. 直接手写递归

递归的遍历每一项,若为数组则继续遍历,否则concat。

function flatten(arr) {
    var res = [];
    arr.map(item => {
        if(Array.isArray(item)) {
            res = res.concat(flatten(item));
        } else {
            res.push(item);
        }
    });
    return res;
}

2. 使用reduce进行递归

也可以使用reduce进行递归。reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

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

3. 使用toString转字符串

调用数组的toString方法,不管数组中是否有嵌套,都会转为一维的字符串,然后再用split分割还原为数组。

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

4. 使用join转字符串

与toString一样,join也可以将数组转为字符串。

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

5. 使用ES6延展运算符

ES6的扩展运算符能将二维数组变为一维。根据这个结果我们可以做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。

function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页