5、用递归扁平化数组1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071//需要扁平化的数组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(){}] * */