# 题目描述

请你手写一个 flatten 函数(数组降维)

# 代码实现

  1. 使用toString展开,再将字符串转为数组

// 使用toString
var arr1 = [1, 9, [2, 3], [], [0, 999, [66, [100, 200]]]];

let res = arr1.toString().split(",");
res = res.filter((item) => item != "").map(Number);

console.log("结果为: ", res);

/* 
结果为:  [
    1,  9,   2,   3, 0,
  999, 66, 100, 200
]
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  1. 使用reduce
// 使用reduce
function myFlatDeep(arr, deep = 1) {
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? myFlatDeep(cur, deep - 1) : cur);
  }, []);
}

// test
var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
const res = myFlatDeep(arr1, Infinity);
console.log("结果为: ", res);

/* 
  结果为:  [
    1, 2, 3, 1, 2,
    3, 4, 2, 3, 4
  ]
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18