当前位置:首页 > JavaScript

js flat 实现

2026-04-06 10:33:54JavaScript

实现数组扁平化的方法

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

使用 Array.prototype.flat()

ES2019 引入了 flat() 方法,可以直接实现数组扁平化。默认情况下,flat() 只会扁平化一层,但可以通过传递参数指定深度。

const arr = [1, [2, [3, [4]]]];
const flattened = arr.flat(Infinity); // 使用 Infinity 可以完全扁平化
console.log(flattened); // [1, 2, 3, 4]

递归实现

通过递归遍历数组,将嵌套数组展开为一维数组。

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 arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]

使用 reduce 实现

结合 reduce 和递归,可以更简洁地实现扁平化。

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

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

使用 while 循环和扩展运算符

通过循环和扩展运算符逐步展开数组。

js flat 实现

function flatten(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

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

使用 toString 方法

如果数组中的元素均为数字或字符串,可以通过 toString 方法快速扁平化。

function flatten(arr) {
  return arr.toString().split(',').map(item => Number(item));
}

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

使用生成器函数

通过生成器函数实现惰性扁平化,适合处理大型数组。

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

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

注意事项

  • 如果数组中包含非数组元素(如对象或函数),某些方法可能需要调整。
  • toString 方法仅适用于数字或字符串数组,其他类型会导致数据丢失或错误。

标签: jsflat
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…