JavaScript 中的数组是一种非常常见的数据类型。在前端开发中,我们经常需要对数组进行操作,其中一个比较常见的操作是将多维数组拍平为一维数组。在 ES8 中,新增了 array.flat()
和 flatMap()
方法,可以很方便地实现数组拍平。
array.flat()
array.flat()
方法可以将多维数组拍平为一维数组。该方法接受一个可选的参数,用于指定拍平的层数。如果不指定参数,则默认拍平一层。
下面是一个示例代码:
----- --- - --- -- --- -- --- ----- ----- ------- - ----------- --------------------- -- --- -- -- -- --- --- ----- -------- - ------------ ---------------------- -- --- -- -- -- -- --
在上面的示例代码中,原始数组 arr
是一个多维数组,包含了三层。通过调用 arr.flat()
方法,可以将其拍平为一维数组,结果为 [1, 2, 3, 4, [5, 6]]
。如果我们想要将所有层级的数组都拍平,可以传入参数 2
,结果为 [1, 2, 3, 4, 5, 6]
。
array.flat()
方法的实现方式比较简单,可以使用递归的方式遍历数组,将所有层级的元素都放入一个新数组中。如果遇到非数组元素,则直接将其放入新数组中。
flatMap()
flatMap()
方法是在 map()
方法的基础上新增的方法,它可以对数组中的每个元素进行映射,并将结果拍平为一维数组。
下面是一个示例代码:
----- --- - --- -- --- ----- ---------- - ------------- -- --- - - ---- ------------------------ -- --- -- -- -- -- --
在上面的示例代码中,原始数组 arr
包含了三个元素。通过调用 arr.flatMap()
方法,并传入一个回调函数,该函数会对每个元素进行映射,并将结果拍平为一维数组。在这个示例中,回调函数返回了一个包含两个元素的新数组,分别是原始元素和原始元素的两倍。最终的结果为 [1, 2, 2, 4, 3, 6]
。
需要注意的是,flatMap()
方法会先调用 map()
方法,然后再调用 flat()
方法。因此,如果回调函数返回的是一个数组,那么该数组会被拍平为一维数组。如果回调函数返回的是一个非数组元素,则该元素会被放入新数组中。
总结
ES8 中新增的 array.flat()
和 flatMap()
方法可以很方便地实现数组拍平。array.flat()
方法可以将多维数组拍平为一维数组,而 flatMap()
方法可以对数组中的每个元素进行映射,并将结果拍平为一维数组。这两个方法都可以接受一个可选的参数,用于指定拍平的层数。在实际开发中,我们可以根据具体的需求选择使用这两个方法中的任意一个。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/660d0ccdd10417a222d72b56