日常中我們可能會遇到將多維數組轉換為一維數組的需求,讓我們來看看如何實現
toString()方法
let array = [1, [2], [3, [4, [5]]]] function flat(arr) { return arr.toString().split(',').map(val => +val) // +是為了將字符串轉為數字 } // 結果為 [1,2,3,4,5]
reduce結合遞歸
const arr = [1, [[2], 3, 4], 5]; const flatten = arr => { return arr.reduce((flat, toFlat) => { return flat.concat(Array.isArray(toFlat) ? flatten(toFlat) : toFlat); }, []); }; const res = flatten(arr); // 結果為: [1,2,3,4,5]
flat()方法(參數只有一層的情況)
const arr = [1, [2, 3, 4], 5]; arr.flat(); // 結果為: [1,2,3,4,5]
擴展題目
編寫一個 JavaScript generator 函數,接受一個僅包含數字的多維數組 ,返回一個迭代器,可以遍歷得到它拍平以后的結果。例如:
const numbers = flatten2([1, [[2], 3, 4], 5]) numbers.next().value // => 1 numbers.next().value // => 2 numbers.next().value // => 3 numbers.next().value // => 4 numbers.next().value // => 5
實現
function* flatten2(a) { var length = a.length; for (var i = 0; i < length; i++) { var item = a[i]; if (typeof item !== 'number') { yield* flatten2(item); } else { yield item; } } }