ES10(2019)Array扩展 flat / flatMap
Posted 优小U
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES10(2019)Array扩展 flat / flatMap相关的知识,希望对你有一定的参考价值。
Array.prototype.flat()
flat()
方法会按照一个可指定的深度
递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组
返回。
const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());
// [0, 1, 2, 3, 4]
const arr2 = [0, 1, 2, [[[3, 4]]]];
console.log(arr2.flat(2));
// [0, 1, 2, [3, 4]]
语法:var newArray = arr.flat([depth])
- depth 可选参数,默认是1,如果想全部扁平可以传
Infinity
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
//使用 Infinity,可展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
flat()
方法会移除数组中的空项:
var arr4 = [1, 2, , 4, 5];
console.log(arr4.flat());
// [1, 2, 4, 5]
Array.prototype.flatMap()
flatMap()
方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map
连着深度值为1
的flat
几乎相同,但flatMap
通常在合并成一种方法的效率稍微高一些。
语法:
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
// return element for new_array
}[, thisArg])
- currentValue 当前正在数组中处理的元素
- index 可选的。数组中正在处理的当前元素的索引。
- array 可选的。被调用的 map 数组
- thisArg 可选的。执行 callback 函数时 使用的this 值。
var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
场景:将几句话的数组拆分成单词数组
let arr1 = ["it's Sunny in", "", "California"];
arr1.map(x => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in", "", "California"]
以上是关于ES10(2019)Array扩展 flat / flatMap的主要内容,如果未能解决你的问题,请参考以下文章
ES10(2019)——JSONArrayObjectFunctiontry.catchBigInt 能力升级
ES10(2019)——JSONArrayObjectFunctiontry.catchBigInt 能力升级
[Javascript] Automate the process of flattening deeply nested arrays using ES2019's flat method(