当前位置:首页 > JavaScript

js flatten 简单实现

2026-02-02 18:29:26JavaScript

使用 Array.prototype.reduce() 和递归

通过递归遍历数组,遇到子数组时继续展开,最终合并为单层数组。

js flatten 简单实现

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

使用 Array.prototype.flat()(ES2019原生方法)

现代浏览器支持的原生方法,直接指定展开深度即可。无限深度可用 Infinity

js flatten 简单实现

const arr = [1, [2, [3]]];
const flattened = arr.flat(Infinity); // [1, 2, 3]

迭代实现(避免递归栈溢出)

通过循环逐层展开子数组,适合处理超大嵌套结构。

function flatten(arr) {
  let result = [];
  const stack = [...arr];

  while (stack.length) {
    const next = stack.pop();
    if (Array.isArray(next)) {
      stack.push(...next);
    } else {
      result.unshift(next);
    }
  }
  return result;
}

使用 Generator 惰性展开

适合逐项处理超大数组的场景,通过生成器延迟计算。

function* flattenGen(arr) {
  for (const item of arr) {
    Array.isArray(item) 
      ? yield* flattenGen(item) 
      : yield item;
  }
}
const flattened = [...flattenGen([1, [2, [3]]])]; // [1, 2, 3]

性能注意事项

  • 递归方法在深度过大时可能触发栈溢出
  • 迭代方法更适合处理超深嵌套结构
  • 原生 flat() 方法性能最优,但需考虑浏览器兼容性

标签: 简单js
分享给朋友:

相关文章

vue实现简单表格

vue实现简单表格

Vue 实现简单表格的方法 使用原生 HTML 表格 在 Vue 模板中可以直接使用 HTML 原生表格标签,通过 v-for 动态渲染数据: <template> <tabl…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…