当前位置:首页 > 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实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

链表实现js

链表实现js

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

js实现正交

js实现正交

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

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…