总结的数组扁平化方法如下:

1,数组自带的方法flat

1
2
const arr = [1,[2,[3,[4,5]]],6]
console.log(arr.flat(Infinity))

数组自带的扁平化方法,flat的参数代表的是需要展开几层,如果是Infinity的话,就是不过嵌套几层,

全部都展开。

如果写的是Infinity的话,就是不管你是多少维数组,都会直接转为一维数组

2,通过正则的方式来让数组扁平化

1
2
3
4
const arr = [1,[2,[3,[4,5]]],6]
const res = JSON.stringify(arr).replace(/\[|\]/g,'')
const res2 = JSON.parse('[' + res + ']')
console.log(res2)

首先是使用JSON.stringify把arr转为字符串。

接着使用正则把字符串里面的 [ 和 ]去掉。

然后再拼接数组括号转为数组对象。

3,(简单粗暴)递归

1
2
3
4
5
6
7
8
9
10
11
12
13
const array = []
const fn = (arr)=>{
for(let i = 0;i<arr.length; i++){
if(Array.isArray(arr[i])){
fn(arr[i])
}
else {
array.push(arr[i])
}
}
}
fn(arr)
console.log(array)

首先,先写一个函数用来让数组扁平,函数先定义一个空数组,作为新数组返回。

接着,使用for循环遍历数组的每一项,

然后,使用Array.isArray()判断这一项是不是数组,

如果是数组,就递归调用这个函数,不是就讲它放到新数组中。

最后将数组返回。

4,(鲜为人知)array.reduce

定义和用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

语法

1
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

reduce()方法是数组的通用方法,接受一个函数作为累加器,另外在接受一个数作为累加器中要用到的数据,可写可不写。

这个回调函数中每个参数的意义如下:

参数 描述
total 必需。初始值,或者计算结束后的返回值。
currentValue 必须,当前元素。
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
1
2
3
4
5
6
const newArr = (arr)=>{
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur) ? newArr(cur) : cur)
},[])
}
console.log(newArr(arr),"reduce方法")