1. // 法一:递归
    2. function flatter(arr) {
    3. if (!arr.length) return;
    4. return arr.reduce((prev, cur) => Array.isArray(cur) ? [...prev, ...flatter(cur)] : [...prev, cur], [])
    5. }
    6. /*
    7. 法二:迭代
    8. 迭代思想:寻找终止条件(如:数组项只要有数组,就一直 while 循环)
    9. */
    10. function flatter(arr) {
    11. if (!arr.length) return
    12. while(arr.some((item) => Array.isArray(item))) {
    13. // console.log(arr)
    14. // 重点
    15. // var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
    16. // 参数:value | value[];数组或值
    17. arr = [].concat(...arr)
    18. }
    19. return arr
    20. }
    21. // 法三:ES6 flat 或 flatMap。
    22. // 嵌套数组.flat(Infinity)
    23. var arr = [1, [2, [3, 4, [5]]]]
    24. flatter(arr) // [1, 2, 3, 4, 5]