Изменения в новых версиях / ES2019

// *** before: ***
var nested = [1, [23], [4, [56]]];
var flat = [].concat.apply([], nested); // разворачивает только один уровень
var doubled = [123].reduce(function (acc, x) {
    return acc.concat([x, x * 2]);
}, []); // flatMap пришлось бы собирать вручную

// *** in version ES2019: ***
const nested = [1, [23], [4, [56]]];
const flat = nested.flat(); // один уровень
const deepFlat = nested.flat(Infinity); // все уровни
const doubled = [123].flatMap(x => [x, x * 2]);