学习链接
269个JavaScript工具函数,助你提升工作效率(新)
数组扁平化
flat 和 flatMap

[1, 2, , 4, 5].flat()// [1, 2, 4, 5][1, 2, [3, [4, 5]]].flat()// [1, 2, 3, [4, 5]][1, 2, [3, [4, 5]]].flat(2)// [1, 2, 3, 4, 5][1, [2, [3]]].flat(Infinity)// [1, 2, 3]
// 相当于 [[2, 4], [3, 6], [4, 8]].flat()[2, 3, 4].flatMap((x) => [x, x * 2])// [2, 4, 3, 6, 4, 8]// 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()[1, 2, 3, 4].flatMap(x => [[x * 2]])// [[2], [4], [6], [8]]
不用 flat 和 flatMap
function flatten(arr) {while(arr.some(item => Array.isArray(item))) {arr = [].concat(...arr);}return arr;}
Array.prototype.myFlat = function (depth = 1) {if (depth < 1) return [...this];return this.map(val => {return [].concat(Array.isArray(val) ? val.myFlat(depth - 1) : val);});}
Array.prototype.myFlat = function (depth = 1) {if (depth < 1) return this.slice();return this.reduce((arr, val) => {return arr.concat(Array.isArray(val) ? val.myFlat(depth - 1) : val);}, []);}
function* flatten(array) {for (const item of array) {if (Array.isArray(item)) {yield* flatten(item);continue;}yield item;}}const arr = [1, 2, [3, 4, [5, 6]]];const flattened = [...flatten(arr)];
