当前位置:首页 > JavaScript

js flatten 简单实现

2026-02-02 18:29:26JavaScript

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

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

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

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

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

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 flatten 简单实现

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 //…

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要通过 transition、transform 和 animation 属性实现。以下是几种常见的实现方法。 使用 transit…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…