1. 什么是数组扁平化
将嵌套多层的数组一层层转化为只有一层或较少层的数组。
flatten可以使数组扁平化
const arr = [1, [2, [3,4]]]
console.log(flatten(arr))//[1,2,3,4]
2. 实现数组扁平化
(1)递归
const flatten = (arr) => {
let result = []
arr.forEach((item, i, arr)) {
if(Array.isArray(item)) {
result = result.concat(flatten(arr[i]))
} else {
result = result.concat(arr[i])
}
}
return result
}
const arr = [1, [2,[3,4]]]
console.log(flatten(arr))
(2)toString(只有数组内元素全是Number类型才能用)
用toString把数组变成以逗号分割的字符串,遍历数组变回原来的类型。
const flatten = (arr) => {
arr.toString().split(',').map((item) => {
+item;
})
}
(3)解构运算符
...每次只能展开最外层的数组,被[].concat后,arr就扁平化一次。
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat(...arr);
}
return arr;
}
const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));