在 ES10 中,数组新增了三种 flat() 方法:flat()、flatMap() 和 flatMapDeep()。在某些情况下,它们可以更好地处理数组的嵌套结构。但是在使用这些方法时,我们需要注意它们之间的区别。
1. flat()
flat() 方法用于将嵌套数组“扁平化”,即将多维数组转换成一维数组。它默认只会“扁平化”一层,如果需要“扁平化”多层嵌套数组,可以传递一个正整数作为参数,表示要“扁平化”的层数。
以下示例演示了 flat() 方法的基本使用:
const arr = [1, 2, [3, 4]]; console.log(arr.flat()); // [1, 2, 3, 4] const arr2 = [1, 2, [3, [4, 5]]]; console.log(arr2.flat(1)); // [1, 2, 3, [4, 5]] const arr3 = [1, 2, [3, [4, [5, 6]]]]; console.log(arr3.flat(2)); // [1, 2, 3, 4, [5, 6]]
2. flatMap()
flatMap() 方法于 flat() 方法类似,但是它在“扁平化”嵌套数组的同时,还可以对数组中的每个元素进行映射操作。它接收一个处理函数作为参数,在“扁平化”数组之前对数组中的每个元素进行处理,并将处理结果作为新数组返回。
以下示例演示了 flatMap() 方法的基本使用:
const arr = ["hello world", "world"]; console.log(arr.flatMap((str) => str.split(" "))); // ["hello", "world", "world"] const arr2 = [1, 2, 3]; console.log(arr2.flatMap((num) => [num * 2])); // [2, 4, 6]
3. flatMapDeep()
flatMapDeep() 方法与 flatMap() 方法类似,但是它可以“扁平化”任意层数的嵌套数组。如果数组中还有嵌套数组,它会递归“扁平化”嵌套数组,并将处理结果作为新数组返回。
以下示例演示了 flatMapDeep() 方法的基本使用:
const arr = [1, 2, [3, [4, [5, 6]]]]; console.log(arr.flatMapDeep((num) => [num * 2])); // [2, 4, 6, 8, 10, 12]
总结
在实际开发中,我们可以根据实际需要选择 flat()、flatMap() 和 flatMapDeep() 方法。如果只需要“扁平化”一维数组,可以使用 flat() 方法;如果需要对数组中的每个元素进行映射操作,可以使用 flatMap() 方法;如果数组中存在任意层数的嵌套数组,可以使用 flatMapDeep() 方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64536207968c7c53b07cc4d8