数组扁平化

148 阅读1分钟

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));