在 ES9 中,Javascript 新增了一些方便使用的方法,其中包括 Array.flat()
和 Array.flatMap()
。这些新的方法尤其是在处理嵌套数组和数组的转换等场景时非常有用。
Array.flat()
Array.flat()
方法是一个非常方便的工具,用于将嵌套数组展平并返回一个新的数组。这个方法是在处理数组时非常实用的。
基本的使用
Array.flat()
方法可以通过添加一个数字参数来指定要展开的嵌套层数。例如,如果我们有一个嵌套的二维数组,可以使用Array.flat(1)
将其转换为一维数组:
const arr = [1, 2, [3, 4, [5, 6]]]; const flatArr = arr.flat(2); console.log(flatArr); // 输出:[ 1, 2, 3, 4, 5, 6 ]
使用 Infinity 参数
如果你不知道数组有多少个嵌套层级,可以使用特殊的 Infinity 参数来表示无限制的嵌套层级:
const arr = [1, 2, [3, 4, [5, 6]]]; const flatArr = arr.flat(Infinity); console.log(flatArr); // 输出:[ 1, 2, 3, 4, 5, 6 ]
注意事项
然而,需要注意的是,Array.flat()
方法将会移除数组中的所有空项:
const arr = [1, 2, [3, 4, , , [5, 6]]]; const flatArr = arr.flat(2); console.log(flatArr); // 输出:[ 1, 2, 3, 4, 5, 6 ]
当展开数组时,可能会遇到这种情况。在这种情况下,你需要注意是否移除了空项,以及数组的中间项是否被处理正确。
Array.flatMap()
Array.flatMap()
方法在 ES9 中也被添加到了 Javascript 中。这个方法基本上是 Array.map()
和 Array.flat()
的组合。这个方法非常实用,可以用于将一个数组转换为新的数组或将一个嵌套数组展平。
基本的使用
和 Array.map()
一样,Array.flatMap()
方法接受一个回调函数。但是,回调函数需要返回一个数组而不是一个单独的值。这个方法可以自动将结果展开为一个新的数组:
const arr = ["Hello World", "From Javascript"]; const flatArr = arr.flatMap(x => x.split(" ")); console.log(flatArr); // 输出:[ 'Hello', 'World', 'From', 'Javascript' ]
使用 Infinity 参数
和 Array.flat()
一样,你也可以使用 Infinity 参数来处理任意嵌套层级的数组:
const arr = [1, 2, [3, 4, [5, 6]]]; const flatArr = arr.flatMap(x => Array.isArray(x) ? x : [x]); console.log(flatArr); // 输出:[ 1, 2, 3, 4, 5, 6 ]
注意事项
需要注意的是,Array.flatMap()
只会展开一层嵌套,而不是无限层级的嵌套。如果你需要处理深度嵌套的数组,你需要使用 Array.flat()
方法:
const arr = [1, 2, [[3, [4, 5]], 6]]; const flatArr = arr.flatMap(x => Array.isArray(x) ? x : [x]).flat(Infinity); console.log(flatArr); // 输出:[ 1, 2, 3, 4, 5, 6 ]
总结
在本文中,我们讨论了 ES9 中新增的 Array.flat()
和 Array.flatMap()
方法的使用。这两个方法是处理数组中嵌套层级和展开多层嵌套数组的工具。了解这些方法的使用方法可以让你更加优雅地处理数组,并且提高了你的编程效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64653281968c7c53b05f459e