当前位置:首页 > JavaScript

js flatten 简单实现

2026-03-15 18:48:03JavaScript

使用 Array.prototype.flat()

ES2019 引入的 flat() 方法可直接实现数组扁平化,默认只展开一层:

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

递归实现

通过递归遍历数组元素,遇到子数组时继续展开:

function flatten(arr) {
  return arr.reduce((acc, val) => 
    Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), 
  []);
}
// 示例:flatten([1, [2, [3]]]) → [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.unshift(next);
    }
  }
  return result;
}

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

对于纯数字或字符串数组,可通过强制类型转换快速扁平化:

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

生成器方案

通过生成器函数实现惰性扁平化:

js flatten 简单实现

function* flatten(arr) {
  for (const item of arr) {
    Array.isArray(item) ? yield* flatten(item) : yield item;
  }
}
// 使用:[...flatten([1, [2, [3]]])]

每种方法各有适用场景:flat() 最简洁但需现代环境;递归清晰但可能栈溢出;迭代适合大数据量;类型转换有局限性;生成器适合流式处理。

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

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滑动

js实现滑动

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

js实现上传图片预览

js实现上传图片预览

使用FileReader实现图片预览 通过FileReader对象读取用户选择的图片文件,并将其显示在页面上。这种方法适用于现代浏览器。 // HTML部分 <input type="file…