ECMAScript 2017 中的 Array.prototype.flat() 和 Array.prototype.flatMap():更好的数组处理

阅读时长 4 分钟读完

ECMAScript 2017 中的 Array.prototype.flat() 和 Array.prototype.flatMap():更好的数组处理

JavaScript 数组是一种基本数据结构,相信前端工程师都在自己的项目中有过相当多的应用。在 ECMAScript 2017 中,我们发现了两个有趣的新方法:Array.prototype.flat() 和 Array.prototype.flatMap()。

这两个方法可以将一个嵌套数组 “拍平” 或者根据原数组按需返回一个新数组,使数组处理变得更加高效、快捷和清晰。下面,让我们分别来深入学习和掌握这两个数组方法的使用。

一、Array.prototype.flat()

方法定义:

参数说明:

  • depth:可选参数,即展开的深度,默认值为 1。如果需要完全展开,则可以使用 Infinity

方法作用:

  • 将一个嵌套数组 “拍平”,返回一个新数组。

举个例子,现在我们有一个嵌套数组:

如果需要将 arr 数组拍平,即将所有嵌套数组里的元素提取到一个新的数组中,可以使用 flat() 方法:

flat() 方法可以将嵌套数组“拍平”,逐层提取内部嵌套数组的元素,并形成一个新的一维数组。当然,这个过程是根据 depth 深度进行的。

如果我们希望展开所有嵌套,可以把 depth 设置为 Infinity:

正如这个例子所示,Infinity 可以将所有嵌套拆分到一维数组中。使用 flat() 方法可以大大提升数组的操作效率。

二、Array.prototype.flatMap()

方法定义:

参数说明:

  • callbackFunction(element, index, array):使用方式与 map() 方法相似,其中处理函数必须返回一个数组,也就是说,该函数的返回值可以是一个一维数组,也可以是一个嵌套数组。flatMap() 会将这些返回值自动‘拍平’成一个数组(默认展开深度为1)。

方法作用:

  • 根据原数组按需返回一个新数组,较为高效

举个例子,现在我们有一个数组:

如果将数组中每个元素都乘 2 并返回新数组,可以使用 map() 方法,它会返回一个新的数组,添加了所有项修改后的新值:

现在,如果我们希望将它们嵌套在不同的数组中,并返回一个一维数组,可以使用 flat() 方法:

在这个例子中,我们使用 map() 方法和一个含有单个元素(即每个元素都被乘以 2)的数组,然后使用 flat() 方法,它会将整个数组 ‘拍平’,生成一个一维数组。但是这里,确实是需要两次方法调用才能实现的。

而使用 flatMap() 方法,可以减少方法调用次数:

利用 flatMap() 方法,只需一次调用,就能达到 map() 和 flat() 同时实现的结果。可以看出,当处理函数已经返回一个嵌套数组时,使用 flatMap() 方法会更简单、更清晰,并且更加高效。

总结

ECMAScript 2017 引入的 Array.prototype.flat() 和 Array.prototype.flatMap(),可以将嵌套数组‘拍平’,或者根据原数组按需返回一个新数组,从而降低了数组处理的复杂度,同时提高了效率和清晰度。在实际开发中,熟练掌握这两个方法的使用,有助于提高代码的质量和效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f5b805f6b2d6eab3e8bc40

纠错
反馈