有这样一种数组:
const arr = [1,[2,[3,[4,5],6],7],8]
当我们需要将它变成一维数组时,使用的操作就是扁平化处理。
第一种:使用js自带的方法 flat()
console.log(arr.flat(3))
结果如下
第二种:使用正则表达式
const res1 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',')
// 得到的是一个字符串数组,将它转化成数字。
console.log(JSON.parse('[' + res1 + ']'))
第三种:利用递归
遍历数组内的每一项,当这一项仍然是数组的时候就遍历该数组,直到不是数组,非数组项将其push进新数组
const arr1 = []
const fn = (arr) => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fn(arr[i])
} else {
arr1.push(arr[i])
}
}
}
fn(arr)
console.log(arr1)
使用reduce
const newArr = (arr) => {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? newArr(cur) : cur)
}, [])
}
console.log(newArr(arr))