1. 二维数组变一维数组
    1. const arr = [
    2. ['a', 'b', 'c'],
    3. ['d', 'e', 'f'],
    4. ['h', 'i', 'g'],
    5. ]
    6. // 双重遍历
    7. function flatOne(arr) {
    8. let result = [];
    9. for(let i = 0; i < arr.length; i++) {
    10. for(let j = 0; j < arr[i].length; j++) {
    11. result.push(arr[i][j])
    12. }
    13. }
    14. return result;
    15. }
    16. console.log(flatOne(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]
    17. // 使用数组的concat;
    18. function flatTwo(arr) {
    19. let result = [];
    20. for(let i = 0; i < arr.length; i++) {
    21. result = result.concat(arr[i])
    22. }
    23. return result;
    24. }
    25. console.log(flatTwo(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]
    26. // 使用apply 和 concat
    27. function flatThree(arr) {
    28. return Array.prototype.concat.apply([],arr);
    29. }
    30. console.log(flatTwo(arr)); // ["a", "b", "c", "d", "e", "f", "h", "i", "g"]
    31. function flatFour(arr) {
    32. return arr.reduce((acc, cur) => a.concat(b), []);
    33. }
    1. 多位数组的扁平化
    1. var arr = [
    2. 2, [4,[5,6]],
    3. ]
    4. // 递归
    5. function flatDeep(arr) {
    6. return Array.isArray(arr)
    7. ? arr.reduce((a, b) => a.concat(flatDeep(b)), [])
    8. : [arr];
    9. }
    10. // es6 扩展运算符
    11. function flattDeep2(arr) {
    12. while(arr.some(item => Array.isArray(item))) {
    13. arr = [].concat(...arr);
    14. }
    15. }
    1. lodash 的_.flattenDeep, _.flat