Array.prototype.flatArray.prototype.flatMap

发布于 · 标记为 ECMAScript ES2019

Array.prototype.flat #

此示例中的数组有多个嵌套级别:它包含一个数组,该数组又包含另一个数组。

const array = [1, [2, [3]]];
// ^^^^^^^^^^^^^ outer array
// ^^^^^^^^ inner array
// ^^^ innermost array

Array#flat 返回给定数组的扁平化版本。

array.flat();
// → [1, 2, [3]]

// …is equivalent to:
array.flat(1);
// → [1, 2, [3]]

默认深度为 1,但您可以传递任何数字以递归地扁平化到该深度。要递归地扁平化直到结果不再包含嵌套数组,我们传递 Infinity

// Flatten recursively until the array contains no more nested arrays:
array.flat(Infinity);
// → [1, 2, 3]

为什么此方法称为 Array.prototype.flat 而不是 Array.prototype.flatten阅读我们的 #SmooshGate 写作以了解更多信息!

Array.prototype.flatMap #

这是一个示例。我们有一个 duplicate 函数,它接受一个值,并返回一个包含该值两次的数组。如果我们将 duplicate 应用于数组中的每个值,我们将得到一个嵌套数组。

const duplicate = (x) => [x, x];

[2, 3, 4].map(duplicate);
// → [[2, 2], [3, 3], [4, 4]]

然后,您可以对结果调用 flat 来扁平化数组

[2, 3, 4].map(duplicate).flat(); // 🐌
// → [2, 2, 3, 3, 4, 4]

由于这种模式在函数式编程中非常常见,因此现在有一个专门的 flatMap 方法来处理它。

[2, 3, 4].flatMap(duplicate); // 🚀
// → [2, 2, 3, 3, 4, 4]

与单独执行 map 然后 flat 相比,flatMap 的效率更高。

有兴趣了解 flatMap 的用例吗?查看 Axel Rauschmayer 的解释

Array#{flat,flatMap} 支持 #