在前端开发中,我们经常需要处理数组数据。当数组嵌套多层时,我们通常需要将其扁平化便于操作处理。在 ES7 中,有一种新的方法可以帮助我们轻松地实现数组的双层扁平化,那就是 Array.prototype.flatMap 方法。
什么是 Array.prototype.flatMap 方法
Array.prototype.flatMap() 方法是在 ES7 中新增加的一个方法,用于对数组进行映射和扁平化操作。
该方法和 Array.prototype.map() 方法作用一样,都是针对数组中的每个元素进行操作,返回一个新的数组,不改变原数组。与 Array.prototype.flat() 方法不同的是,Array.prototype.flatMap() 方法的返回结果会自动去除一层嵌套。
该方法的语法如下:
arr.flatMap(callback(currentValue[, index[, array]])[, thisArg])
其中,callback 函数能够接收三个参数:
- currentValue:数组中正在处理的当前元素。
- index(可选):当前元素的索引值。
- array(可选):调用 flatMap 方法的数组本身。
另外,thisArg 参数也可选,表示 callback 函数中 this 的指向。
使用 Array.prototype.flatMap 方法扁平化双层数组
借助 Array.prototype.flatMap 方法,我们可以用更加简洁的代码实现数组的双层扁平化操作。
在下面的示例中,我们将 array1 数组中的双层数组扁平化,得到只有一层的新数组 new_array1:
const array1 = [[1, 2], [3, 4], [5, 6]]; const new_array1 = array1.flatMap(item => item); console.log(new_array1); // [1, 2, 3, 4, 5, 6]
在上面的代码中,我们使用了箭头函数来定义 callback 函数,将返回值设置为了 item(即每个子数组),这样就能够将数组扁平化为只有一层了。
同样地,我们还可以通过链式调用法,在一个数组中完成多层扁平化的操作。在下面的示例中,我们将 array2 数组中的双层数组扁平化,得到只有一层的新数组 new_array2:
const array2 = [[1, 2], [3, [4, 5]], [6, [7, 8, [9, 10]]]]; const new_array2 = array2.flatMap(item => item).flatMap(item => item); console.log(new_array2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
同样地,我们将 callback 函数的返回值也设置为了 item,这样就能够继续扁平化数组。
结论
- Array.prototype.flatMap() 方法是新增加的数组方法,能够将双层数组扁平化。
- 该方法和 Array.prototype.map() 方法作用一样,都是对数组中的每个元素进行操作,返回一个新的数组,不改变原数组。
- 与 Array.prototype.flat() 方法不同的是,Array.prototype.flatMap() 方法的返回结果会自动去除一层嵌套。
- 使用 Array.prototype.flatMap 方法,我们可以用更加简洁的代码实现数组的双层扁平化操作。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6738c8c6317fbffedf12d62f