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

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…