Сглаживание массива означает сокращение многомерного или вложенного массива (массива, в котором некоторые элементы сами являются массивами) до одного единственного массива с элементами в исходном порядке. Первые два метода, которые я буду обсуждать, spread и reduce (), работают с двумерными массивами, то есть с массивами, которые являются одноуровневыми вложенными. Вторые два способа обработки сглаживания массива с использованием flat () и рекурсии работают с массивами, вложенными на любом уровне.

Сглаживание массива - это классический технический вопрос на собеседовании, который я сам напомнил. Меня больше не обманут, и я надеюсь, что вы тоже не поймете после прочтения моего простого обзора.

Использование Spread ES6 (работает с двумерными массивами)

Мы используем оператор распространения, чтобы разложить вложенный массив и объединить его с пустым массивом.

Ввод 2D-массива: [[3, 2, 1], [4, 6, 5], [], [9, 7, 8]]

Вывод 2D-массива: [3, 2, 1, 4, 6, 5, 9, 7, 8]

Использование Reduce (работает с двумерными массивами)

Метод reduce () уменьшает массив до одного значения с помощью функции обратного вызова. Аккумулятор - это то, во что вы копаете, в данном случае - новый массив. CurrentValue - это текущий элемент в массиве. InitialValue - это начальное значение, которое будет передано функции, и в этом случае мы устанавливаем его в пустой массив. Обратный вызов редуктора будет выполняться для каждого элемента.

Базовый синтаксис такой: array.reduce (callback (аккумулятор, currentValue), initialValue);

Ввод 2D-массива: [[3, 2, 1], [4, 6, 5], [], [9, 7, 8]]

Вывод 2D-массива: [3, 2, 1, 4, 6, 5, 9, 7, 8]

Использование Flat (работает с массивами любой глубины)

Введенный в ES2019, flat () возвращает новый массив, который является плоской версией оригинала, удаляя все пустые слоты в массиве. Он работает в большинстве современных браузеров. Существует необязательный аргумент, известный как глубина, который представляет собой количество уровней для сглаживания массива. Использование «Бесконечности» в качестве аргумента глубины означает сглаживание всех уровней в одномерный массив, что позволяет использовать этот метод для массива любой глубины, в отличие от распространения и уменьшения. Довольно круто.

Ввод трехмерного массива: [[3, 2, 1, [3, 4]], [4, 6, 5], [], [9, 7, 8]]

Вывод трехмерного массива: [3, 2, 1, 3, 4, 4, 6, 5, 9, 7, 8]

Использование рекурсии (работает с массивами любой глубины)

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

Ввод трехмерного массива: [[3, 2, 1, [3, 4]], [4, 6, 5], [], [9, 7, 8]]

Вывод трехмерного массива: [3, 2, 1, 3, 4, 4, 6, 5, 9, 7, 8]