5、用递归扁平化数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//需要扁平化的数组
var arr = [[1,2,3,[true,false,[3,4],5],6],function a (){}]
//封装函数
function flattening(arr) {
//创建空数组接收数组
var list = []
//判断传进来的arr是否为数组
if(arr instanceof Array){
//如果是则便利这个数组
for (var i = 0 ;i<arr.length;i++){
list = list.concat(flattening(arr[i]))
}
}else {
//如果不是则直接放进list
list.push(arr)
}
//返回list
return list
}
/*
* [1]
* [true,false]
* [true,false,3,4]
* [true,false,3,4,5]
* [function a(){}]
* */


/*
* 第一层函数
* 传进去 [1,2,3,[true,false,[3,4],5],6,function a (){}]
* list = []
* arr是数组所以开始循环
* i = 0
* arr[i] = 1
* */



/*
* 1传参进来
* list = []
* 1不是数组则list.push(1)
* list = [1]
* 然后返回list
* 第一层函数的list.concat([1])
* 如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。
* 所以第一层函数的list = [1] 而不是 [[1]]
* */


/*
* 继续循环 则第一层 i = 1
* 则传进去的参数是[true,false,[3,4]]
* 这次是数组
* 所以开启第三层函数 true 和 flase 参考第一层函数
* 传参[3,4]
* 返回第二层list [3, 4]
* 则第二层的list = [true,false,3,4]
* 在把第二层的list返回第一层则第一层的list = [1,true,false,3,4]
* */
/*


* [1]
* [true,false]
* [true,false,3,4]
* [true,false,3,4,5]
* [function a(){}]
* */