方法多多,第一種方法是我在字節面試的時候,要我現場寫出來的,記憶深刻
Method 1:array.reduce實現
1 function flatten(arr = []) { 2 return arr.reduce((a, b) => { 3 if (Array.isArray(b)) { 4 return [...a, ...flatten(b)] 5 } else { 6 return [...a, b] 7 } 8 }, []) 9 } 10 11 var arr = [1, [2, 3], [4, 5, 6]] 12 var newArr = flatten(arr) 13 console.log(newArr)
Method 2: 正常邏輯的遞歸實現
1 function flatten(arr) { 2 let arr1 = [] 3 arr.forEach((val) => { 4 // 檢測左邊的原型是否在右邊構造函數的作用域鏈上 5 if (val instanceof Array) { 6 arr1 = arr1.concat(fn(val)) 7 } else { 8 arr1.push(val) 9 } 10 }) 11 return arr1 12 } 13 var arr = [1, 2, [3, 4, 5, [6, 7, 8], 9], 10, [11, 12]]; 14 var newArr = flatten(arr) 15 console.log(newArr) // output: 1,2,3,4,5,6,7,8,9,10,11,12
Method 3: apply 方式
function flatten(arr = []) { while (arr.some(r => Array.isArray(r))) { arr = [].concat.apply([], arr) } return arr; } var arr = [1, [2, 3], [4, 5, 6]] var newArr = flatten(arr) console.log(newArr)
更多方法請直接百度,方法多多