js数组扁平化

124 阅读1分钟

数组扁平化是前端面试常考的问题,本文分别采用了flat、toString、递归、reduce和some五中方式来进行实现。

1、flat

const arr = [1,2,3,[4,5],[6,7,8]];
console.log(arr.flat()); // [1,2,3,4,5,6,7,8]

但如果arr是多层嵌套的,就需要在flat函数传入嵌套数组结构深度,默认为1

2、toString

const arr = [1,2,3,[4,5],[6,7,8]]; 
const flatten = (arr) => arr.toString().split(',').map((item) => Number(item));
console.log(flatten(arr));

3、递归

function flatten(arr) {
  const flatArr = [];
  const recur = (arr) => {
    arr.forEach((item) => {
      if (Array.isArray(item)) {
        recur(item);
      } else {
        flatArr.push(item);
      }
    })
  }
  recur(arr);
  return flatArr;
}

4、reduce实现

function flatten(arr) {
  return arr.reduce((prev, next) => {
    return prev.concat(Array.isArray(next) ? flatten(next) : next);
  }, [])
}

5、some

function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))){
        arr=[].concat(...arr);
    }
    return arr;
}