一、扁平化函数
    (1)将每个非数组元素一个一个push到新数组,遍历到数组元素时,递归调用扁平化函数。

    1. function flatten(arr){
    2. let flattenedArr = [];
    3. function isArray(obj){
    4. return {}.toString.call(obj) === '[object Array]'
    5. }
    6. function flattenFn(arr){
    7. arr.forEach((item)=>{
    8. if(isArray(item)){
    9. flattenFn(item)
    10. }else{
    11. flattenedArr.push(item)
    12. }
    13. })
    14. }
    15. flattenFn(arr)
    16. return flattenedArr
    17. }
    18. let arr = [1,2,[3,{},[5,[6],[7]]]];
    19. console.log(flatten(arr))
    1. 2)创建一个新数组,遍历数组,如果遇到非数组元素,则push进新数组,如果遍历到数组元素,则递归调用该函数。利用concat
    1. function flatten(arr){
    2. let len = arr.length,
    3. fArr = [],
    4. item;
    5. function isArray(obj){
    6. return {}.toString.call(obj) === '[object Array]'
    7. }
    8. for(var i = 0; i < len; i++ ){
    9. item = arr[i];
    10. if(isArray(item)){
    11. fArr = fArr.concat(flatten(item))
    12. }else{
    13. fArr.push(item)
    14. }
    15. }
    16. return fArr
    17. }
    18. let arr = [1,2,[3,{},[5,[6],[7]]]];
    19. console.log(flatten(arr))

    (3)利用reduce

    1. function flatten(arr){
    2. if({}.toString.call(arr) !== '[object Array]'){
    3. throw new Error('only array is accecpted')
    4. }
    5. let farr = arr.reduce((accumulotar,item)=>{
    6. if({}.toString.call(item) === '[object Array]') {
    7. accumulotar = accumulotar.concat(flatten(item))
    8. }else{
    9. accumulotar.push(item)
    10. }
    11. return accumulotar
    12. },[])
    13. return farr
    14. }
    15. let arr = [1,2,[3,{},[5,[6],[7]]]];
    16. console.log(flatten(arr))