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 连着深度值为1flat几乎相同,但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的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:ES2019 的新特性

ES10(2019)新特性

ES10(2019)——JSONArrayObjectFunctiontry.catchBigInt 能力升级

ES10(2019)——JSONArrayObjectFunctiontry.catchBigInt 能力升级

[Javascript] Automate the process of flattening deeply nested arrays using ES2019's flat method(

ECMA Script 2019 (ES10)新内容