Spec-Zone.ru › JavaScript

Array.prototype.flat()

Базовая линия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.

Метод flat() экземпляров Array создает новый массив, в который рекурсивно объединены все элементы подмассивов до указанной глубины.

Попробуйте

const arr1 = [0, 1, 2, [3, 4]];

console.log(arr1.flat());
// expected output: Array [0, 1, 2, 3, 4]

const arr2 = [0, 1, [2, [3, [4, 5]]]];

console.log(arr2.flat());
// expected output: Array [0, 1, 2, Array [3, Array [4, 5]]]

console.log(arr2.flat(2));
// expected output: Array [0, 1, 2, 3, Array [4, 5]]

console.log(arr2.flat(Infinity));
// expected output: Array [0, 1, 2, 3, 4, 5]

Синтаксис

flat()
flat(depth)

Параметры

depth Необязательный
Уровень глубины, определяющий, насколько глубоко должна быть выровнена вложенная структура массива. По умолчанию — 1.

Возвращаемое значение

Новый массив, в который объединены элементы подмассивов.

Описание

Метод flat() является методом копирования. Он не изменяет this, а вместо этого возвращает поверхностную копию, которая содержит те же элементы, что и исходный массив.

Метод flat() удаляет пустые слоты, если выравниваемый массив является разреженным. Например, если depth равен 1, то игнорируются как пустые слоты в корневом массиве, так и в первом уровне вложенных массивов, но пустые слоты в более глубоко вложенных массивах сохраняются вместе с самими массивами.

Метод flat() является обобщенным. Он ожидает, что значение this имеет только свойство length и свойства с целочисленными ключами. Однако его элементы должны быть массивами, если их нужно выравнивать.

Примеры

Выравнивание вложенных массивов

const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

const 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() с разреженными массивами

Метод flat() удаляет пустые слоты в массивах:

const arr5 = [1, 2, , 4, 5];
console.log(arr5.flat()); // [1, 2, 4, 5]

const array = [1, , 3, ["a", , "c"]];
console.log(array.flat()); // [ 1, 3, "a", "c" ]

const array2 = [1, , 3, undefined, ["a", , ["d", , "e"]], null];
console.log(array2.flat()); // [ 1, 3, undefined, "a", ["d", empty, "e"], null ]
console.log(array2.flat(2)); // [ 1, 3, undefined, "a", "d", "e", null ]

Вызов flat() для объектов, не являющихся массивами

Метод flat() считывает свойство length объекта this, а затем обращается к каждому свойству, ключ которого является неотрицательным целым числом меньше length. Если элемент не является массивом, он напрямую добавляется к результату. Если элемент является массивом, он выравнивается в соответствии с параметром depth.

const arrayLike = {
  length: 3,
  0: [1, 2],
  // Array-like objects aren't flattened
  1: { length: 2, 0: 3, 1: 4 },
  2: 5,
  3: 3, // ignored by flat() since length is 3
};
console.log(Array.prototype.flat.call(arrayLike));
// [ 1, 2, { '0': 3, '1': 4, length: 2 }, 5 ]

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.flat

Совместимость с браузерами

Настольные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
flat
69
79
62
56
12
69
62
48
12
10.0
69
12
1.0.0
1.0
11.0.0

См. также

  • Полифил Array.prototype.flat в core-js
  • Полифил es-shims для Array.prototype.flat
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.concat()
  • Array.prototype.flatMap()
  • Array.prototype.map()
  • Array.prototype.reduce()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API