当前位置:首页 > JavaScript

js flat 实现

2026-02-01 17:37:08JavaScript

实现数组扁平化的方法

在 JavaScript 中,数组扁平化是指将多维数组转换为一维数组的过程。以下是几种常见的实现方法。

使用递归实现

通过递归遍历数组的每个元素,如果元素是数组则继续递归,否则将元素添加到结果数组中。

js flat 实现

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

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]

使用 reduce 实现

利用 reduce 方法遍历数组,递归处理嵌套数组。

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

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]

使用 ES6 flat 方法

ES6 提供了 flat 方法,可以指定扁平化的深度。默认深度为 1,使用 Infinity 可以完全扁平化。

js flat 实现

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(nestedArray.flat(Infinity)); // [1, 2, 3, 4, 5]

使用栈实现

通过栈结构迭代处理数组元素,非数组元素直接压入结果,数组元素则展开后继续处理。

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

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]

使用生成器实现

通过生成器函数递归遍历数组,生成扁平化后的序列。

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

const nestedArray = [1, [2, [3, [4]], 5]];
console.log([...flatten(nestedArray)]); // [1, 2, 3, 4, 5]

以上方法各有优缺点,可以根据具体场景选择最适合的实现方式。递归和 reduce 方法简洁但可能受调用栈限制,flat 方法最直接但需要现代浏览器或环境支持,栈和生成器方法适合处理大规模数据。

标签: jsflat
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js 实现分页

js 实现分页

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