当前位置:首页 > JavaScript

js flat实现

2026-04-06 13:02:02JavaScript

flat 方法的基本概念

flat() 是 JavaScript 数组的一个方法,用于将嵌套数组“扁平化”,即将多维数组转换为一维数组。默认情况下,flat() 只会扁平化一层嵌套,但可以通过参数指定深度。

基本语法

arr.flat([depth])
  • depth(可选):指定要扁平化的嵌套层数,默认为 1。如果传入 Infinity,则会完全扁平化所有嵌套。

使用示例

默认扁平化一层

const arr1 = [1, 2, [3, 4]];
console.log(arr1.flat()); // 输出: [1, 2, 3, 4]

指定扁平化深度

const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat(2)); // 输出: [1, 2, 3, 4, 5, 6]

完全扁平化

const arr3 = [1, 2, [3, 4, [5, 6, [7, 8]]]];
console.log(arr3.flat(Infinity)); // 输出: [1, 2, 3, 4, 5, 6, 7, 8]

手动实现 flat 方法

如果不支持 flat() 方法(如旧版浏览器),可以手动实现类似功能:

js flat实现

递归实现

function flatten(arr, depth = 1) {
  if (depth === 0) return arr.slice();
  return arr.reduce((acc, val) => {
    return acc.concat(Array.isArray(val) ? flatten(val, depth - 1) : val);
  }, []);
}

const arr = [1, 2, [3, 4, [5, 6]]];
console.log(flatten(arr, 2)); // 输出: [1, 2, 3, 4, 5, 6]

迭代实现

function flatten(arr, depth = 1) {
  let result = arr.slice();
  while (depth-- > 0) {
    let flattened = false;
    const temp = [];
    for (const val of result) {
      if (Array.isArray(val)) {
        temp.push(...val);
        flattened = true;
      } else {
        temp.push(val);
      }
    }
    result = temp;
    if (!flattened) break;
  }
  return result;
}

const arr = [1, 2, [3, 4, [5, 6]]];
console.log(flatten(arr, 2)); // 输出: [1, 2, 3, 4, 5, 6]

注意事项

  • 如果数组中包含空位(如 [1, , 3]),flat() 方法会忽略这些空位。
  • 手动实现时需要注意性能问题,尤其是对于深度嵌套的大数组。

标签: jsflat
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

jquery.js

jquery.js

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

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…