JS数组拍平
日常中我们可能会遇到将多维数组转换为一维数组的需求,让我们来看看如何实现
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; } } }
语雀链接🔗 https://www.yuque.com/suihangadam
归来卧占楼千尺,梦落沧波明月舟。