Сглаживание массива означает сокращение многомерного или вложенного массива (массива, в котором некоторые элементы сами являются массивами) до одного единственного массива с элементами в исходном порядке. Первые два метода, которые я буду обсуждать, 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]