当前位置:首页 > JavaScript

js实现flatten

2026-03-14 22:37:43JavaScript

实现数组扁平化的方法

使用递归方法

递归是最直观的实现方式,通过遍历数组元素,遇到子数组时递归调用自身。

function flatten(arr) {
  let result = [];
  arr.forEach(item => {
    if (Array.isArray(item)) {
      result = result.concat(flatten(item));
    } else {
      result.push(item);
    }
  });
  return result;
}

使用reduce方法

reduce方法可以更简洁地实现扁平化,结合递归处理嵌套数组。

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

使用ES6的flat方法

现代JavaScript提供了原生扁平化方法,可以指定扁平化深度。

// 完全扁平化
const flattened = arr.flat(Infinity); 

// 指定扁平化层级
const flattenedLevel1 = arr.flat(1);

使用扩展运算符

对于浅层扁平化(一层),可以使用扩展运算符结合concat。

function flattenOneLevel(arr) {
  return [].concat(...arr);
}

使用Generator函数

对于大型数组,可以使用生成器实现惰性求值。

function* flattenGenerator(arr) {
  for (const item of arr) {
    if (Array.isArray(item)) {
      yield* flattenGenerator(item);
    } else {
      yield item;
    }
  }
}

const flattened = [...flattenGenerator(nestedArray)];

性能考虑

对于大型深层嵌套数组,递归方法可能导致堆栈溢出。这时可以使用迭代方法:

js实现flatten

function flattenIterative(arr) {
  const stack = [...arr];
  const result = [];
  while (stack.length) {
    const next = stack.pop();
    if (Array.isArray(next)) {
      stack.push(...next);
    } else {
      result.push(next);
    }
  }
  return result.reverse();
}

每种方法各有优缺点,递归方法代码简洁但可能堆栈溢出,迭代方法更安全但代码稍复杂,原生flat方法最简洁但需要考虑浏览器兼容性。

标签: jsflatten
分享给朋友:

相关文章

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…