前端/移动开发面试题更新 2026-08-05

请给出 JavaScript 中将嵌套数组转换为单一扁平数组的具体实现代码,并说明处理深层嵌套与空数组的方式。

前端/移动开发编码实现JavaScript

考察说明

考查候选人掌握数组扁平化的多种实现方式及边界处理能力。

回答思路

  1. 【回答框架 1】先给出递归实现:声明 flatten 函数,遍历数组元素,若元素仍为数组则递归调用 flatten 并连接结果,否则直接 push,最后返回新数组。
  2. 【回答框架 2】再给出迭代实现:使用栈(数组模拟)进行深度优先遍历,将所有元素压栈,遇到数组就展开,最终得到扁平结果,避免递归调用栈溢出。
  3. 【回答框架 3】介绍 ES6 的 flat() 方法:直接调用 arr.flat(Infinity) 实现任意深度扁平化,简洁高效,但需注意浏览器兼容性。
  4. 【回答框架 4】补充 reduce 与 concat 的组合写法:arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []),体现函数式编程思路。
  5. 【回答框架 5】说明边界情况:处理空数组时保证返回空数组;对于多层嵌套和稀疏数组,flat 方法会跳过空位,递归与迭代方案需要额外处理。
  6. 【关键点 1】递归实现通过 Array.isArray 判断并递归展开。
  7. 【关键点 2】迭代栈方案避免递归深度限制。
  8. 【关键点 3】flat(Infinity) 是最简洁的 Api 方法。
  9. 【关键点 4】reduce 与 concat 组合实现函数式扁平化。
  10. 【易错点 1】递归实现未考虑深层次时可能栈溢出。
  11. 【易错点 2】错误使用 flat() 默认深度 1 导致嵌套未展开。
  12. 【易错点 3】忽略稀疏数组空位可能产生意外结果。