ES10 中的新方法 Array.flat 和 Array.flatMap 引用时的错误处理

在 JavaScript 中,数组是一种保存多个值的有序集合,它非常常见。ES6 引入了很多方便的 Array 新方法,例如 Array.map、Array.filter、Array.reduce 等等。而在 ES10 中,我们迎来了两个新的函数,它们分别是 Array.flat 和 Array.flatMap,它们可以让开发者方便地操作多维数组。

Array.flat 方法

Array.flat 方法可以将嵌套数组(多维数组)变成一维数组。该方法可以通过指定数组嵌套的深度来逐级剥离嵌套的数组,将其扁平化结构展示出来。

语法如下:

  • arr: 表示当前数组
  • depth: 如果不指定 depth,flat 默认会将嵌套数组全部展开,depth 不能小于 1,否则 flat 不起作用。

示例代码:

const arr = [1, [2, 3], [[4], [5, [6]]]];
console.log(arr.flat()) // [1, 2, 3, [4], 5, [6]]
console.log(arr.flat(1)) // [1, 2, 3, [4], 5, [6]]
console.log(arr.flat(2)) // [1, 2, 3, 4, 5, [6]]
console.log(arr.flat(3)) // [1, 2, 3, 4, 5, 6]

Array.flatMap 方法

Array.flatMap 方法可以先使用 map 方法,然后使用 flat 将结果扁平化,也就是合并所有的映射结果成一个新数组。在某些场景下,它可以一步到位地实现 FlatMap 效果。

语法如下:

  • callback:生成新数组元素的函数,该函数可以接受三个参数:currentValue,index 和 array。
  • currentValue:当前正在处理的元素。
  • index:当前正在处理的元素位置,从 0 开始。
  • array:调用 flatMap 的原数组。
  • thisArg(可选):执行 callback 函数时 this 的值。

示例代码:

const arr = ["Hello", "world"]
const newArr = arr.flatMap(x => x.split(""));
console.log(newArr) // ["H", "e", "l", "l", "o", "w", "o", "r", "l", "d"]

引用时的错误处理

需要注意的是,虽然 Array.flat 和 Array.flatMap 是新方法,但是在旧的浏览器中无法使用。在使用时需要注意,需要先进行一下兼容性处理,避免出现错误。

一种处理方式是使用 polyfill:

if (!Array.prototype.flat) {
    Array.prototype.flat = function() {
        // Use the old technique instead
    };
}

另一种方式是使用 babel。在使用 babel 时,需要安装一个插件 @babel/plugin-proposal-optional-chaining,然后在 .babelrc 中编写以下内容:

{
    "plugins": [
        "@babel/plugin-proposal-optional-chaining"
    ]
}

总结

这篇文章中,我们简要介绍了 ES10 中的两个新方法 Array.flat 和 Array.flatMap,并且提醒了在使用时需要进行一些错误处理。这两个新方法虽然不是很常见,但是它们在某些场景下非常有用,可以帮助开发者快速的搞定从多维数组搞到一维数组的问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6592633ceb4cecbf2d732d9c


纠错反馈