数组扁平化

const a = [1, 2, [4, 3, 6], [2, 45, [4, 5, 3, [6, 4, 7]]]];

leetcode/数组扁平化.md at master · xingpengchao/leetcode (github.com)

数组扁平化

第一种:循环+递归

function flattenDeep(arr) {
  let newArr = [];

  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      newArr.push.apply(newArr, flattenDeep(arr[i]));
    } else {
      newArr.push(arr[i]);
    }
  }

  return newArr;
}

第二种:apply + some

function flattenDeep(arr) {
  while (arr.some((item) => Array.isArray(item))) {
    arr = [].concat.apply([], arr);
  }

  return arr;
}

第三种:扩展运算符(...)

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

  return arr;
}

第四种:数组的reduce

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

第五种:ES10的flat

function flattenDeep(arr) {
  return arr.flat(Infinity);
}