# flatten数组扁平化

把所有嵌套数组连接到一个数组中，也即数组扁平化\
&#x20;数组扁平化小课堂开课啦：

* 完全扁平化：
  * 如果数组的元素都是数字，那么我们可以考虑使用toString方法，`[1,[2,[3,4]]].toString().split(',').map((c)=>Number(c));`
  * 利用reduce+递归 `flatten = (arr)=>arr.reduce((prev,next)=>prev.concat(Array.isArray(next)?flatten(next):next),[]);`

    * 利用...运算符，

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

只去除一层：

* 一个很神奇的方法 `Function.apply.bind([].concat,[]);`

  解释:

  ```
  flatten = Function.apply.bind([].concat,[]);
        = (arr)=>[].concat.apply([],arr);
        = [].concat(...arr)
  ```
* `[].concat(...arr);`  \\

解释：`a = [1,[3,2]] => [].concat(1,[3,2]) => [1].concat([3,2]) =>[1,3,2]`

因为一层去除结合es6`...`很容易实现,我们这里只支持完全扁平化

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