当前位置:首页 > JavaScript

flat js实现

2026-02-01 04:35:08JavaScript

在JavaScript中实现扁平化(flatten)数组操作可以通过多种方式完成,以下是几种常见的方法:

使用 Array.prototype.flat()

ES2019引入了原生方法flat(),可直接将嵌套数组扁平化。默认只展开一层,可通过参数指定深度或使用Infinity完全展开。

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

递归实现

通过递归遍历数组元素,若元素是数组则继续展开,否则收集到结果中。

function flattenDeep(arr) {
  return arr.reduce((acc, val) => 
    Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), 
  []);
}
const result = flattenDeep([1, [2, [3, [4]]]]);

迭代实现(栈)

使用栈结构非递归地展开数组,适合处理深层嵌套。

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

使用 concat 与扩展运算符

结合concat和扩展运算符逐层展开,需多次调用直到无嵌套。

flat js实现

function flattenOneLevel(arr) {
  return [].concat(...arr);
}
// 多次调用直到完全扁平化

性能注意事项

  • 原生flat()方法性能最优,但需考虑浏览器兼容性。
  • 递归方式代码简洁,但可能栈溢出(极端深层嵌套时)。
  • 迭代方法适合处理未知深度的数组,但代码稍复杂。

根据实际需求选择方法,现代项目优先使用flat(),兼容性要求高的场景可采用递归或迭代方案。

标签: flatjs
分享给朋友:

相关文章

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现正交

js实现正交

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

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…