# 数组扁平化

# 题目要求

要求使用递归、迭代,两种解法去手写数组扁平化。

# 答案解析

1、递归

let testArr = [1, 2, [1, [2, 3, [4, 5, [6]]]]];

function flatter(arr) {
  if (arr.length == 0) return;

  return arr.reduce(
    (pre, cur) =>
      Array.isArray(cur) ? [...pre, ...flatter(cur)] : [...pre, cur],
    []
  );
}

console.log(flatter(testArr)); // [ 1, 2, 1, 2, 3, 4, 5, 6]

2、迭代

let testArr = [1, 2, [1, [2, [, 3, 4, 5, 6], 3, [4, 5, [6]]]]];

function flatter(arr) {
  // 当数组中存在数组类型的数组元素,则继续使用扩展运算符扁平化。
  while (arr.some((item) => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

console.log(flatter(testArr));// [ 1, 2, 1, 2, undefined, 3, 4, 5, 6, 3, 4, 5, 6 ]

# 思路要点

1、当遇到数组时,递归返回值,并将上一个结果与递归返回的数组一同使用扩展运算符,并放入同一数组。 2、while迭代实际上也算一种递归,每次将判断新的arr内是否有数组,再使用扩展运算符将内数组扩展开来。