在 ECMAScript 2019 中,新增了许多有趣的功能和特性。其中一个引人注目的变化是新增了 Array 的 flat()
方法。这个方法可以将一个多维数组的嵌套结构转换为一个一维数组,非常方便。
flat()
方法的基本用法
如果你有一个多维数组,如下所示:
const nestedArray = [1, 2, [3, [4, 5]]];
你想把它打平成一个一维数组。使用原生的方法可能会显得比较繁琐:
const flatArray = [].concat(...nestedArray.map(item => Array.isArray(item) ? item.flat() : item)); //=> [1, 2, 3, 4, 5]
使用 flat()
方法就会简单很多:
const flatArray = nestedArray.flat(); //=> [1, 2, 3, 4, 5]
可以看到,flat()
方法可以将嵌套的子数组将其转换为一个一维数组。
指定深度参数
在某些情况下,你可能希望只打平第一层或前几层的数据。这时可以使用 depth
参数来指定需要扁平化的层数。
例如,假设你现在有一个三维数组:
const threeDimensionalArray = [1, 2, [3, [4, 5, [6, 7]]]];
现在我们希望将其前两层的数据压缩成一个二维数组。使用 flat()
方法时,只需将深度参数设置为 2 即可:
const flatArray = threeDimensionalArray.flat(2); //=> [1, 2, 3, 4, 5, [6, 7]]
你会发现,depth
参数的作用是指定打平的层数。
处理空项
在扁平化数组时,可能会遇到空数组或者 null / undefined 值。此时 flat()
方法的默认行为是将这些值从结果中删除,但如果显式指定 depth
参数,空项也可能被保留。
例如,假设你有一个包含空数组的多维数组:
const nestedArrayWithEmpty = [1, [2, []], 3, [[]]];
当使用 flat()
方法进行打平处理时,空数组将被自动删除:
const flatArray = nestedArrayWithEmpty.flat(); //=> [1, 2, 3]
如果不想去掉空数组,可以通过指定 depth
参数来实现:
const flatArray = nestedArrayWithEmpty.flat(Infinity); //=> [1, 2, 3, []]
将对象转换为数组
最后,与 ES2019 中其他新特性一样,flat()
方法也具有考虑周全的功能,能够处理包含对象的数组。
const objArray = [1, { name: 'Alice' }, [2, { name: 'Bob' }]]; const flatArray = objArray.flat(); //=> [1, { name: 'Alice' }, 2, { name: 'Bob' }]
如你所见,该方法不仅处理多维数组,还可以将嵌套在对象中的数据转换成一个一维数组。
总结
flat()
方法是一个用于扁平化嵌套数组的实用工具。它可以大幅简化嵌套数组的操作,并且具有许多有用的特性。使用 flat()
函数时,重要的是注意其 depth
参数的默认值和行为以及如何处理空项。
希望这篇文章对你有所帮助,加油学习吧!
示
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6504477d95b1f8cacd0f9789