Array.prototype.flat 和 flatMap

版本新特性 / ES2019

// *** before: ***
var nested = [1, [2, 3], [4, [5, 6]]];
var flat = [].concat.apply([], nested); // flattens one level only
var doubled = [1, 2, 3].reduce(function (acc, x) {
    return acc.concat([x, x * 2]);
}, []); // flatMap had to be assembled by hand

// *** in version ES2019: ***
const nested = [1, [2, 3], [4, [5, 6]]];
const flat = nested.flat(); // one level
const deepFlat = nested.flat(Infinity); // every level
const doubled = [1, 2, 3].flatMap(x => [x, x * 2]);