二维数组降维
二维数组只有两个维度,降维比较简单,也不用考虑太复杂的算法逻辑,我们看一下二维数组降维的几种方法;
遍历降维
[ 'h','m','y','w','d','!' ]
此方法思路简单,利用双重循环遍历二维数组中的每个元素并放到新数组中。
使用concat
利用concat方法,可以将双重循环简化为单重循环:
[ 'h','!' ]
arr的每一个元素都是一个数组或参数,作为concat方法的参数,数组中的参数或每一个子元素又都会被独立插入进新数组。
使用apply+concat
apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数;
[ 'h','!' ]
利用apply方法,只需要一行代码就可以完成二维数组降维了。
多维数组降维
多维数组就没二维数组那么简单了,因为不确定数组的深度,所以也不能进行遍历来降维,只能通过递归或者栈方法来实现。
递归
[ 2,2,{ name: 'Tom' } ]
这是通过递归的方法实现了多维数组的降维,在这里面,我有使用了原型链将方法封装进了Array原型中,可以直接在数组方法中调用。
栈方法
这是通过栈方法,建立了一个栈,将数组的内容存进去,然后逐个取出来,如果取出来的是个数组,就将这个数组打散拼接进栈中,在出栈一个,这样循环。
多维数组降维的方法也可以降维二维数组,但是有点大材小用,还是用对的方法做对的事才是最好的!