- 二维数组变一维数组
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 和 concat
function 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