ES6数组扁平化:flat()与flatMap()方法详解

作者:木棉

时间:2026-10-24

浏览:503

本文详解ES6新增的数组扁平化方法flat()与flatMap()。flat()用于将嵌套数组展开为一维,支持通过整数参数指定展开层数或使用Infinity处理任意层级,且自动跳过空位。flatMap()结合映射与扁平化,仅支持单层展开,适用于需要先对元素处理再展平的常见场景。

文章目录

ES6数组扁平化概述

本文通过具体实例解析ES6中数组的flat()与flatMap()函数的使用方法,供读者参考学习。

当数组元素包含子数组时,可以使用Array.prototype.flat()方法将嵌套结构“拉平”,生成一个一维数组。该方法返回一个新数组,不会修改原始数据。

flat()方法基础用法


[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]

如示例所示,原数组中包含子数组,flat()方法会将子数组中的元素提取出来,并放置在原数组对应的位置上,从而实现扁平化处理。

flat()方法默认仅展开一层嵌套。若需处理多层嵌套数组,可传入一个整数参数,指定希望展开的层数,默认值为1。

flat()多层展开与参数控制


[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]

示例中flat()传入参数2,表示将嵌套数组展开两层,从而得到完全扁平化的一维结果。

无论嵌套层数多少,若需直接转换为一维数组,可将参数设置为Infinity关键字,以实现无限层级的展开。

flat()处理无限层级与空位


[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]

若原数组中存在空位(empty slots),flat()方法会自动跳过这些空位,不将其包含在返回的新数组中。


[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

flatMap()方法首先对原数组的每个成员执行指定的回调函数,其效果等同于先执行Array.prototype.map();随后对映射后的结果数组执行flat()方法。该方法返回一个新数组,不改变原数组。

flatMap()方法原理与限制


// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]

需要注意的是,flatMap()方法仅支持展开一层数组,无法处理多层嵌套结构。

读者可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码的实际运行效果。

如需了解更多JavaScript相关知识,可参考本站系列教程:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》。

希望本文提供的关于JavaScript程序设计的说明能对大家有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章