当前位置:首页 > JavaScript

js flatten 简单实现

2026-04-07 12:12:52JavaScript

使用 Array.prototype.flat()

ES2019 引入的原生方法,直接展开嵌套数组。默认展开一层,可通过参数指定深度(如 Infinity 完全展开)。

const nested = [1, [2, [3]]];
const flattened = nested.flat(Infinity); // [1, 2, 3]

递归实现

遍历数组,递归处理嵌套的数组元素,合并结果。

function flatten(arr) {
  return arr.reduce((acc, val) => 
    Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), 
  []);
}
const nested = [1, [2, [3]]];
console.log(flatten(nested)); // [1, 2, 3]

迭代实现(栈)

利用栈结构迭代处理嵌套数组,避免递归可能导致的栈溢出。

function flatten(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();
}
const nested = [1, [2, [3]]];
console.log(flatten(nested)); // [1, 2, 3]

使用 toString()(仅数字/字符串)

将数组转为字符串后分割(需元素为基本类型)。

const nested = [1, [2, [3]]];
const flattened = nested.toString().split(',').map(Number); // [1, 2, 3]

生成器函数

通过生成器逐层展开数组,适合处理大规模数据。

js flatten 简单实现

function* flattenGen(arr) {
  for (const item of arr) {
    Array.isArray(item) ? yield* flattenGen(item) : yield item;
  }
}
const nested = [1, [2, [3]]];
const flattened = [...flattenGen(nested)]; // [1, 2, 3]

标签: 简单js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

vue实现简单的弹窗

vue实现简单的弹窗

Vue实现简单弹窗的方法 使用v-if和v-show控制显示 通过Vue的指令v-if或v-show可以轻松控制弹窗的显示与隐藏。v-if会完全销毁和重建DOM元素,而v-show仅通过CSS的di…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js sort 实现

js sort 实现

数组排序基础方法 JavaScript 数组的 sort() 方法默认按照字符串 Unicode 码点顺序排序。直接调用时会将元素转为字符串再比较: const arr = [10, 2, 5, 1…