本文详解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程序设计的说明能对大家有所帮助。