当前位置:首页 > JavaScript

js实现flat

2026-04-07 01:35:21JavaScript

实现数组扁平化的方法

使用递归方法

递归遍历数组的每个元素,判断是否为数组类型。如果是数组则继续递归,否则将元素加入结果数组。

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

使用迭代方法

通过循环和栈结构实现非递归的扁平化操作,适合处理深层嵌套数组。

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();
}

使用ES2019的flat方法

现代JavaScript提供了原生扁平化方法,可通过参数指定展开深度。

// 展开一层
arr.flat(); 

// 完全展开
arr.flat(Infinity);

使用Generator实现

通过生成器函数逐步产生扁平化结果,适合处理超大数组。

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

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

性能优化版本

针对特定场景优化的实现,使用循环代替递归避免堆栈溢出。

js实现flat

function flattenOptimal(arr) {
  let result = [];
  let queue = [arr];
  let current;

  while (queue.length) {
    current = queue.shift();
    if (Array.isArray(current)) {
      queue.unshift(...current);
    } else {
      result.push(current);
    }
  }

  return result;
}

每种方法适用于不同场景:递归写法简洁但可能堆栈溢出,迭代方法性能稳定但代码稍复杂,原生API最简洁但需要考虑浏览器兼容性。

标签: jsflat
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现vr

js实现vr

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

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…