法一:使用數組map()方法,對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。數組
var arr = [1,[2,[[3,4],5],6]]; function unid(arr){ var arr1 = (arr + '').split(',');//將數組轉字符串後再以逗號分隔轉爲數組 var arr2 = arr1.map(function(x){ return Number(x); }); return arr2; } console.log(unid(arra));
法二:使用apply結合concat,缺點是隻能將二維轉一維,多維數組則不對了。app
const arr = [1,[2,3],[4,5]];
console.log([].concat.apply([],arr));
法三:將數組轉爲字符串再轉爲數組,缺點是數組中每項成字符串了函數
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(','))
法四:遞歸spa
var arr = [1,[2,[[3,4],5],6]]; var newArr = []; function fun(arr){ for(var i=0;i<arr.length;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+遞歸code
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]