当前位置:首页 > 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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现图表

js实现图表

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

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

vue实现简单表格

vue实现简单表格

使用 Vue 实现简单表格 Vue 提供了多种方式实现表格功能,以下是基于 Vue 3 的两种常见方法: 基础表格实现 通过 v-for 指令循环渲染表格数据: <template>…