- 二维数组变一维数组
const arr = [ ['a', 'b', 'c'], ['d', 'e', 'f'], ['h', 'i', 'g'],]// 双重遍历function flatOne(arr) { let result = []; for(let i = 0; i < arr.length; i++) { for(let j = 0; j < arr[i].length; j++) { result.push(arr[i][j]) } } return result;}console.log(flatOne(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]// 使用数组的concat;function flatTwo(arr) { let result = []; for(let i = 0; i < arr.length; i++) { result = result.concat(arr[i]) } return result;}console.log(flatTwo(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]// 使用apply 和 concatfunction flatThree(arr) { return Array.prototype.concat.apply([],arr);}console.log(flatTwo(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]function flatFour(arr) { return arr.reduce((acc, cur) => a.concat(b), []);}
- 多位数组的扁平化
var arr = [ 2, [4,[5,6]],]// 递归function flatDeep(arr) { return Array.isArray(arr) ? arr.reduce((a, b) => a.concat(flatDeep(b)), []) : [arr];}// es6 扩展运算符function flattDeep2(arr) { while(arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); }}
- lodash 的
_.flattenDeep, _.flat