数组扁平是啥?

数组扁平化是指将一个多维数组变为一维数组;
实现扁平的基本思想:遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。

扁平实现

  1. flat方法
    1
    2
    let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
    arr.flat(Infinity); //[1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
  2. 递归实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function flatten(arr) {
    var res = [];
    arr.map(item => {
    if(Array.isArray(item)) {
    res = res.concat(flatten(item));
    } else {
    res.push(item);
    }
    });
    return res;
    }
  3. reduce实现(也是递归的一种写法)
    1
    2
    3
    4
    5
    function flatten(arr){
    return arr.reduce((result,item)=>{
    return result.concat(Array.isArray(item) ? flatten(item) : item)
    },[])
    }
  4. ES6 ...运算符实现
    1
    2
    3
    4
    5
    6
    function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
    arr = [].concat(...arr);
    }
    return arr;
    }
  5. 转字符串拆分实现
    1
    2
    3
    4
    5
    function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
    return parseInt(item);
    })
    }