const a = [[1], [3, [4, 5, [6, 7]]], [8], [9, [2, 10]]]
循環數組元素,若是仍是一個數組,就遞歸調用該方法數組
function flatten1(arr){ let res = []; for(var i=0;i<arr.length;i++){ if(Array.isArray(arr[i])){ res = res.concat(flatten1(arr[i])); } else { //注意concat 和push 方法的返回值不一樣 //res=res.concat(arr[i]); res.push(ary[i]) } } return res; }
使用reduce來簡化方法1的代碼:函數
function flatten2(arr){ return arr.reduce((prev, cur) => prev.concat(Array.isArray(cur) ? flatten2(cur) : cur),[]) }
toString方法轉成字符串,split方法把字符串切割成數組,字符串拼接方法code
function flatten3(arr){ return arr.toString().split(',').map(item=> +item) }
some則當其中一個返回true,則最終結果爲true, 至關於邏輯運算符||。遞歸
function flatten4(arr){ while(arr.some(item => Array.isArray(item))){ arr = [].concat(...arr); } return arr; }
every方法表示當數組每一個元素在斷定函數中都返回true,則最終結果爲true,至關於邏輯運算符 &&字符串
function flatten5(arr) { while (!arr.every(item => typeof item === 'number' && !isNaN(item))) { arr = [].concat(...arr); console.log(arr); } return arr; } console.log(...a)