惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V2EX - 技术
V2EX - 技术
云风的 BLOG
云风的 BLOG
O
OpenAI News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园_首页
A
Arctic Wolf
PCI Perspectives
PCI Perspectives
Hacker News: Ask HN
Hacker News: Ask HN
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Engineering at Meta
Engineering at Meta
Scott Helme
Scott Helme
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
罗磊的独立博客
量子位
SecWiki News
SecWiki News
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
G
Google Developers Blog
K
Kaspersky official blog
Recorded Future
Recorded Future
Project Zero
Project Zero
Webroot Blog
Webroot Blog
W
WeLiveSecurity
D
Docker
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
Google DeepMind News
Google DeepMind News
T
Troy Hunt's Blog
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
I
InfoQ
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
Lohrmann on Cybersecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cyberwarzone
Cyberwarzone
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Register - Security
The Register - Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

Mengke's blog - Mengke's coding journey

年轻不是健康的免死金牌 深圳工作机会,前端 2025 年终总结 Skill 不是 MCP 的替代品:我理解的渐进式披露与选型原则 独立开发者如何开具发票 香港银行卡开户完整指南(2025年9月最新) 招商银行储蓄卡微信动账提醒恢复方法 再谈 MCP - Model Context Protocol(MCP)详解和开发教程 Get Human-Readable "Time Ago" in TypeScript 以「asset-price-mcp」为例,从 0 开发 MCP Server Model Context Protocol (MCP) 快速开始 DeepSeek + Dify 搭建本地知识库 An elegant solution for implementing optional property types using TypeScript 2024 年终总结 Quickly Create a Fullscreen WebView with Autoplay Support for Testing 以数字开头的 ID 在 querySelector 中的处理 String casing utilities in JavaScript Check if a string is a valid color Simple Event-Emitter/PubSub pattern Find which process is running on a certain port and kill it Markdown Code block's basic and advanced syntaxes Common npm commands to use locally Pnpm aliases How to safely rename a case sensitive file/directory in a git repo? A custom hooks to use an async effect A custom hooks to use local storage state 🤩 Mengke'blog 上线的这一年 🗼 五月底去了一趟日本,记录一下我的游记和攻略 网站性能优化:如何高效预加载大型静态资源 闰年之约 - 2024年2月29日 A collection of some useful websites 2023 年终总结 WebGL 学习笔记(一)基础概念与实践 Android Webview <video> 标签去除默认播放按钮图 📷 纯前端也可以实现「用户无感知录屏」? Getting Spotify token to display now playing track on your website AVP - Web 端特效视频播放器 IndexedDB 基础入门 直接下载网易云音乐中歌曲MP3格式的方法 什么!一个项目给了8个字体包??? flex 布局中 start/end 和 flex-start/flex-end 的区别 深入 Pinia:从代码出发探索 Vue 状态管理的奥秘 Pinia 快速上手指南 Nest.js Typrorm 多对多关系如何创建 Strapi 快速入门 CentOS7 MySQL 数据库安装与卸载 Next.js 上手指南 Vue 数据响应式原理 deno 快速上手 - Hello World 案例 快速上手 Vue3 尝鲜 Vue 3.0 Combination API react-router-dom 路由基础教程
JavaScript 数组扁平化处理的方法总结
Mengke · 2020-06-28 · via Mengke's blog - Mengke's coding journey

Andy holmes lZTQZRIXzDc unsplash.webp

Published on
/

5 mins read

/

––– views

Share:

数组扁平化

所谓“数组扁平化”就是指将一个多维数组变为一个一维数组,比如:

我们通过几种常用方式来实现数组的扁平化。


方法1:flat()法

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

  • 语法:var newArray = arr.flat([depth])

  • depth:可选,指定要提取嵌套数组的结构深度,默认值为 1。

  • 当depth值为 Infinity,可展开任意深度的嵌套数组

    例子:


方法2:split法

思路: 转换成字符串,再使用去除[]等符号,在使用split(',')进行分组。 例子:

缺点: 从输出结果可以看出数组里的数字被转为了字符串,成了字符串数组。


方法3:parse法

思路: 方法3和方法2的思路差不多,转换成字符串,再使用去除[]等符号,再在字符串两端加上[],最有使用JSON.parse()进行格式化。

JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。提供可选的 reviver 函数用以在返回之前对所得到的对象执行变换(操作)。

例子:


方法4:递归法

思路: 递归法可以说是最传统的方法,同时也是最麻烦的方法,不过也可以很好的解决数组扁平化的问题。主要是遍历第一层数组的每一个元素,判断元素是否还是数组,如果是就进行递归,不是的话push进结果数组。

例子:


方法5:reduce法

reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。 reducer 函数接收4个参数:

  • Accumulator (acc) (累计器)
  • Current Value (cur) (当前值)
  • Current Index (idx) (当前索引)
  • Source Array (src) (源数组)

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

思路: 使用reduce()获得上一次操作的结果,并判断当前值是否为一个数组,如果是一个数组金鼎递归,如果不是数组则使用concat()向前合并。

例子:


方法6:扩展运算符法

展开语法(Spread syntax), 可以在函数调用/数组构造时, 将数组表达式或者 string 在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。(译者注: 字面量一般指 [1, 2, 3] 或者 {name: 'mdn'} 这种简洁的构造方式)

语法:myFunction(...iterableObj);

例子:

缺点: 此方法最大的缺点就是改变了原素组,可将元素组提前备份。