法一:使用數(shù)組map()方法,對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結果組成的數(shù)組。
```
var arr = [1,[2,[[3,4],5],6]];function unid(arr){
? ? ? ? var arr1 = (arr + '').split(',');//將數(shù)組轉字符串后再以逗號分隔轉為數(shù)組var arr2 = arr1.map(function(x){
? ? ? ? ? ? return Number(x);
? ? ? ? });
? ? ? ? return arr2;
}
console.log(unid(arra));
```
法二:使用apply結合concat,缺點是只能將二維轉一維,多維數(shù)組則不對了。
```
const arr = [1,[2,3],[4,5]];
console.log([].concat.apply([],arr));
```
法三:將數(shù)組轉為字符串再轉為數(shù)組,缺點是數(shù)組中每項成字符串了
```
var arr = [1,[2,[[3,4],5],6]];
var arr2 = arr.join(',').split(',');
console.log(arr2);//["1", "2", "3", "4", "5", "6"]
```
//或
```
var c=[1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];
console.log(c.toString().split(','))
```
法四:遞歸
```
var arr = [1,[2,[[3,4],5],6]]; var newArr = [];
? ? function fun(arr){
? ? ? ? for(vari=0;i
? ? ? ? ? ? if(Array.isArray(arr[i])){
? ? ? ? ? ? ? ? fun(arr[i]);
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? newArr.push(arr[i]);
? ? ? ? ? ? }
? ? ? ? }
? ? }
fun(arr);
console.log(newArr);//[1, 2, 3, 4, 5, 6]
```
法五:reduce+遞歸
```
use strict';
? ? var arr = [1,[2,[[3,4],5],6]];
? ? const flatten = arr => arr.reduce(
? ? ? ? ? ? (acc,val) => acc.concat(Array.isArray(val)? flatten(val):val),[]
? ? )
? ? console.log(flatten(arr));//[1, 2, 3, 4, 5, 6]
```
作者:haoxl