• 语法: flatten(array)
    • 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中
    • 如: [1, [3, [2, 4]]] ==> [1, 3, 2, 4]

    ES2019 方法 flat(depth) 深度,默认值为 1。

    • flat() 方法会移除数组中的空项
    • 使用 Infinity,可展开任意深度的嵌套数组 ```javascript var arr = [1, 2, [3, 4]];

    // 展开一层数组 arr.flat(); // 等效于 arr.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4]

    // 使用扩展运算符 … const flattened = arr => [].concat(…arr);

    1. ```javascript
    2. // 方法1:ES6中 Array.prototype.flat()
    3. console.log(arr.flat(Infinity))
    4. // 方法2:迭代的思路
    5. function flat(arr, depth = 1) {
    6. while (arr.some((item) => Array.isArray(item)) && depth > 0) {
    7. arr = [].concat(...arr);
    8. depth--;
    9. }
    10. return arr;
    11. }
    12. // 方法3:递归
    13. function flat(arr, depth = 1) {
    14. let result = [];
    15. function _loop(arr) {
    16. arr.forEach((item) => {
    17. if (Array.isArray(item) && depth > 0) {
    18. _loop(item, depth--);
    19. } else {
    20. result.push(item);
    21. }
    22. });
    23. }
    24. _loop(arr);
    25. return result;
    26. }
    27. // 方法4:reduce + 递归
    28. function flat(arr, depth = 1) {
    29. return d > 0
    30. ? arr.reduce(
    31. (acc, val) =>
    32. acc.concat(Array.isArray(val) ? flat(val, depth - 1) : val),
    33. []
    34. )
    35. : arr.slice();
    36. }
    37. // toString
    38. function flat (arr) {
    39. return arr.toString().split(',').map(item => Number(item)) //转成字符串会只有一个逗号相隔
    40. }
    41. console.log(flat(arr))
    42. // stringify
    43. function flat (arr) {
    44. let str = JSON.stringify(arr)
    45. str = str.replace(/\[|\]/g, '') //去掉中括号
    46. return str.split(',').map(item => Number(item)))
    47. }
    48. console.log(flat(arr))