今天看到一个话题讨论JavaScript数组扁平化,忍不住自己也实现一下,在下采用的方式和别人不同,talk is cheap,show you the code!
法一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function  flattenArray (arr )  {      if  (arr && Array .isArray(arr)) {         return  arr.reduce((acc, cur ) =>  {                      acc = acc.concat(cur)           for (let  item of  acc) {             if  (item && item instanceof  Array ) {               return  arguments .callee(acc)             }           }           return  acc         }, [])       }     } 
 
法二: 1 2 3 4 5 6 function  flattenArr (arr )  {  while  (arr.some(item  =>  Array .isArray(item))) {     arr = [].concat(...arr)   }   return  arr } 
 
法三:递归 1 2 3 4 5 6 7 8 9 function  flatten (arr )  {  let  res = []   for  (let  i = 0 ; i < arr.length; i++) {     if  (arr[i] instanceof  Array ) {       res = res.concat(flatten(arr[i]))     } else  res.push(arr[i])   }   return  res } 
 
法四:reduce递归 1 2 3 4 5 function  flatten (arr )  {  arr.reduce((prev, val ) =>  {     return  prev.concat(Array .isArray(val) ? flatten(val) : val)   }, []) } 
 
法五:JSON.stringify / JSON.parse(结合正则替换) 1 2 3 4 5 6 function  flatten (arr )  {  let  str = JSON .stringify(arr)   str = str.replace(/\[|\]/g , '' )      return  JSON .parse('['  + str + ']' ) } 
 
这可以解决任何多维数组的扁平化,比如,我们实验一下:
1 2 3 let  arr = [1 , [2 ,11 ], [3 ,[4 ,5 ]],[6 ,[7 , [8 ,[9 ]]]]]   let  c = flattenArray(arr)    console .log(c) 
 
输出,如下:
如此,我们就解决了数组扁平化操作。如有不当之处,希望批评指教!在此谢过!