数组扁平化是将一个多维数组转化为一维数组
[1,[2,[3,4,[5,6]]]] -------> [1, 2, 3, 4, 5, 6]
可以使用的方法:
1.float:Array.prototype.flat():将嵌套的数组变成一维数组。该方法返回一个新数组,对原数据没有影响
let arr = [1,[2,[3,4,[5,6]]]]
const result = arr.flat(Infinity)
console.log(result) // [1, 2, 3, 4, 5, 6]
console.log(arr.flat(1)) // [1, 2, [3,4,[5,6]]]
console.log(arr.flat(2)) // [1, 2, 3, 4, [5,6]]
console.log(arr.flat(3)) // [1, 2, 3, 4, 5, 6]
2.正则表达式,利用正则表达式进行转换
// 正则表达式
const result =JSON.parse('['+JSON.stringify(arr).replace(/\[|\]/g,'').split(',')+']')
console.log(result) // [1, 2, 3, 4, 5, 6]
// 分析,先利用正则去掉数组中的'['和']'
console.log(JSON.stringify(arr).replace(/\[|\]/g,'')) // 1,2,3,4,5,6
console.log(JSON.stringify(arr).replace(/\[|\]/g,'').split(','))
//["1", "2", "3", "4", "5", "6"]
3.利用reduce处理
// reduce()
const flatten = arr => {
return arr.reduce((pre,cur) => {
console.log('pre',pre) //表示上一次调用回调时的返回值,或者初始值;
console.log('cur',cur) // 表示当前正在处理的数组元素
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur )
},[])
}
console.log('aaaaaaaaa',flatten(arr)) // [1, 2, 3, 4, 5, 6]
4.利用递归解决
// 递归调用
const temp = []
const fun = arr => {
for (var i = 0 ;i<arr.length;i++) {
if (Array.isArray(arr[i])) {
fun(arr[i]) //是数组的话继续递归处理,直到处理到一维
}else {
temp.push(arr[i]) //将处理查找到的一维数组值存储到temp中
}
}
}
fun(arr)
console.log('aaaaaaaaa',temp) // [1, 2, 3, 4, 5, 6]