ES8 array.flat() 和 flatMap() 实现数组拍平

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