多维数组降维
一:递归
Array.isArray()
用于确定传递的值是否是一个数组。
1 | const oldArr = [1, 2, [3, 4]]; |
- 递归遍历数组,利用
Array.isArray
方法判断该元素是否是一个数组- 如果当前元素是数组,表示存在嵌套数组的存在,就继续递归该数组进行降维
- 不是数组,就表示是最外层元素,不需要递归继续降维了,就将其加入到
newArr
结果数组
- 在整个遍历过程中,递归调用会一直深入嵌套的数组中,直到最内层的元素全部被添加到
newArr
数组中
二:reduce方法
2.1 二维降一维
**reduce**(**callback**(accumulator, currentValue, currentIndex, array), initialValue)
- accumulator : 上一次调用
callbackFn
的结果。在第一次调用时,如果指定了initialValue
则为指定的值,否则为array[0]
的值- currentValue : 当前元素的值。在第一次调用时,如果指定了
initialValue
,则为array[0]
的值,否则为array[1]
。- currentIndex :
currentValue
在数组中的索引位置。在第一次调用时,如果指定了initialValue
则为0
,否则为1
- array : 调用的
数组本身
1 | const oldArr = [1, 2, [3, 4]]; |
- 第一个参数
prev
作为累计值为回调函数的返回值,或是初始值 - 第二个参数
curr
作为当前值,即当前迭代的元素 reduce()
方法以递归的方式遍历多维数组的每个元素,并将它们合并到累积值中
2.2 多维降一维
reduce递归
1 | const getFlat1 = (arr) => |
- 还是使用reduce方法迭代数组
- 判断curr迭代的当前元素是否是Array数组,如果是就递归调用进行降维,并使用concat方法与累加器prev合并
- 如果不是数组,就直接合并
三:flat方法
es6方法,flat(),用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
- 参数可以设置拉平的层数,不设置参数默认为1
- 如果不管有多少层的嵌套,都要转为一维数组,可以用
Infinity
关键字作为参数- 如果原数组中有空位的话,会直接跳过空元素,直接合并到一起
1 | const oldArr = [1, 2, , [3, 4]]; |