当前位置:首页 > JavaScript

js flat实现

2026-02-01 20:03:46JavaScript

数组扁平化的概念

数组扁平化是指将多维数组转换为一维数组的过程。例如,将 [1, [2, [3, [4]], 5]] 转换为 [1, 2, 3, 4, 5]

js flat实现

使用 Array.prototype.flat()

ES2019 引入了 flat() 方法,可以方便地实现数组扁平化。该方法接受一个可选的参数 depth,表示要扁平化的深度,默认值为 1。

js flat实现

const arr = [1, [2, [3, [4]], 5]];

// 默认扁平化一层
console.log(arr.flat()); // [1, 2, [3, [4]], 5]

// 指定深度为 2
console.log(arr.flat(2)); // [1, 2, 3, [4], 5]

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

手动实现扁平化

如果需要在不支持 flat() 的环境中使用,可以手动实现扁平化功能。

递归实现

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

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

使用 while 循环和 concat

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

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

使用 reduceconcat

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

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

性能比较

  • flat() 方法是原生实现,性能最优。
  • 递归实现的性能通常优于 while 循环实现,但需要注意栈溢出问题。
  • reduceconcat 的实现简洁,但性能略低于递归实现。

注意事项

  • 扁平化操作可能会改变原始数组的结构,建议在必要时进行深拷贝。
  • 对于非常大的数组,递归实现可能会导致栈溢出,可以考虑使用迭代方法替代。

标签: jsflat
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js防抖和节流实现

js防抖和节流实现

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

js实现二叉树

js实现二叉树

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

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…