当前位置:首页 > JavaScript

js flatten 简单实现

2026-03-15 18:48:03JavaScript

使用 Array.prototype.flat()

ES2019 引入的 flat() 方法可直接实现数组扁平化,默认只展开一层:

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

递归实现

通过递归遍历数组元素,遇到子数组时继续展开:

function flatten(arr) {
  return arr.reduce((acc, val) => 
    Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), 
  []);
}
// 示例:flatten([1, [2, [3]]]) → [1, 2, 3]

迭代实现

利用栈结构迭代处理嵌套数组:

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

使用 toString(仅数字/字符串)

对于纯数字或字符串数组,可通过强制类型转换快速扁平化:

const numbers = [1, [2, [3]]];
const flattened = numbers.toString().split(',').map(Number); 
// [1, 2, 3]

生成器方案

通过生成器函数实现惰性扁平化:

js flatten 简单实现

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

每种方法各有适用场景:flat() 最简洁但需现代环境;递归清晰但可能栈溢出;迭代适合大数据量;类型转换有局限性;生成器适合流式处理。

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

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js画图实现

js画图实现

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

js实现密码

js实现密码

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

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…