Изравняването на масив означава редуциране на многоизмерен или вложен масив (масив, в който някои елементи сами по себе си са масиви) до един единствен масив с елементи в първоначалния ред. Първите два метода, които ще обсъдя, spread и reduce(), работят върху двуизмерни масиви, което означава масиви, които са вложени на едно ниво. Вторите два начина за обработка на изравняването на масив, използвайки flat() и рекурсия, работят върху масиви, вложени на всяко ниво.

Изравняването на масив е класически въпрос за техническо интервю, на който самият аз бях объркан. Няма да бъда заблуден отново и се надявам, че и вие няма да го направите, след като прочетете простия ми преглед.

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

Използваме оператора spread, за да разпръснем вложения масив и да го свържем с празен масив.

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

Извеждане на 2D масив: [3, 2, 1, 4, 6, 5, 9, 7, 8]

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

Методът reduce() редуцира масив до една стойност с помощта на функция за обратно извикване. Акумулаторът е нещото, в което бъркате, в този случай нов масив. CurrentValue е текущият елемент в масива. Началната стойност е първоначалната стойност, която трябва да бъде предадена на функцията и в този случай я задаваме на празен масив. Обратното извикване на редуктора ще бъде изпълнено на всеки елемент.

Основният синтаксис е следният: array.reduce(callback(accumulator, 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() връща нов масив, който е сплесканата версия на оригинала, като премахва всички празни слотове в масива. Работи на повечето съвременни браузъри. Има незадължителен аргумент, известен като дълбочина, който е броят нива за изравняване на масива. Използването на „Infinity“ като аргумент за дълбочина означава изравняване на всички нива до едноизмерен масив, което ви позволява да използвате този метод върху масив с всякаква дълбочина, за разлика от разпространението и намаляването. Много готино.

Въвеждане на 3D масив: [[3, 2, 1, [3, 4]], [4, 6, 5], [], [9, 7, 8]]

Извеждане на 3D масив: [3, 2, 1, 3, 4, 4, 6, 5, 9, 7, 8]

Използване на рекурсия (работи върху масив с всякаква дълбочина)

Това е методът от старата школа за изравняване на масив с произволна дълбочина, който беше предпочитаният преди въвеждането на flat(). Вижте моето обяснение за намаляване по-горе. Този метод използва същата логика като това обяснение, но вместо да свържете currentValue с акумулатора, първо проверявате дали currentValue е масив. Ако е масив, извикайте рекурсивно функцията си recursiveFlatten. Ако не е масив, продължете и свържете текущата стойност с акумулатора.

Въвеждане на 3D масив: [[3, 2, 1, [3, 4]], [4, 6, 5], [], [9, 7, 8]]

Извеждане на 3D масив: [3, 2, 1, 3, 4, 4, 6, 5, 9, 7, 8]