Клавиша / esc

.flat()

Массив в массиве, в массиве, в массиве. А можно попроще? Превращает многомерный массив в плоский, одномерный.

Время чтения: меньше 5 мин

Кратко

Скопировано

Метод flat() возвращает новый массив и уменьшает вложенность массива на заданное количество уровней.

Пример

Скопировано

У нас есть массив с тремя уровнями вложенности:

        
          
          const nested = [  'первый уровень',  'первый уровень',  [    'второй уровень',    'второй уровень',    [      'третий уровень',      'третий уровень'    ]  ]]
          const nested = [
  'первый уровень',
  'первый уровень',
  [
    'второй уровень',
    'второй уровень',
    [
      'третий уровень',
      'третий уровень'
    ]
  ]
]

        
        
          
        
      

Вызовем метод flat() без аргументов:

        
          
          const flat = nested.flat()console.log(flat)
          const flat = nested.flat()
console.log(flat)

        
        
          
        
      

Увидим что получившийся массив стал менее вложенным:

        
          
          [  'первый уровень',  'первый уровень',  'второй уровень',  'второй уровень',  [    'третий уровень',    'третий уровень'  ]]
          [
  'первый уровень',
  'первый уровень',
  'второй уровень',
  'второй уровень',
  [
    'третий уровень',
    'третий уровень'
  ]
]

        
        
          
        
      

Как пишется

Скопировано

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

Результатом вызова метода flat() будет новый массив меньшей вложенности.

Как понять

Скопировано

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

Если вложенность неизвестна

Скопировано

Если вложенность неизвестна, но нужно получить из массива с вложенными элементами плоский массив, то передайте аргумент Infinity. Тогда метод рекурсивно обойдёт массив и сделает на его основе новый плоский.

Возьмём массив с тремя уровнями вложенности:

        
          
          const nested = [  'первый уровень',  'первый уровень',  [    'второй уровень',    'второй уровень',    [      'третий уровень',      'третий уровень',      [        'четвёртый уровень',        'четвёртый уровень'      ]    ]  ]]
          const nested = [
  'первый уровень',
  'первый уровень',
  [
    'второй уровень',
    'второй уровень',
    [
      'третий уровень',
      'третий уровень',
      [
        'четвёртый уровень',
        'четвёртый уровень'
      ]
    ]
  ]
]

        
        
          
        
      

Вызовем метод flat() с аргументом Infinity:

        
          
          const flat = nested.flat(Infinity)console.log(flat)
          const flat = nested.flat(Infinity)
console.log(flat)

        
        
          
        
      

Тогда массив превратится в плоский:

        
          
          [  'первый уровень',  'первый уровень',  'второй уровень',  'второй уровень',  'третий уровень',  'третий уровень',  'четвёртый уровень',  'четвёртый уровень']
          [
  'первый уровень',
  'первый уровень',
  'второй уровень',
  'второй уровень',
  'третий уровень',
  'третий уровень',
  'четвёртый уровень',
  'четвёртый уровень'
]