Сегодняшняя проблема - забавная! Давайте посмотрим на спиральную матрицу.

Таким образом, вопрос заключается в том, чтобы мы манипулировали нашей матрицей таким образом, чтобы мы возвращали результат, который является «спиральным» порядком нашей исходной матрицы. Давайте попробуем и посмотрим, есть ли шаблон, который мы можем использовать, чтобы помочь нам решить эту проблему. Глядя на вывод, мы знаем, что первое, что мы должны сделать, это взять верхний массив в нашей матрице и добавить его к результатам. Нам нужно будет каким-то образом продолжать движение по нашей матрице. Цикл for на самом деле не имеет смысла, потому что мы не хотим перемещаться по индексам в линейном порядке. Мы можем использовать цикл while, который будет выполняться, пока наша матрица имеет длину.

matrix.shift() — это часть нашей функции, которая завершает цикл while. В конце концов, matrix.shift() удалит все подмассивы из матрицы, и наш цикл while завершится.

Здесь мы помещаем подмассив в наш результат и используем оператор распространения, чтобы добавить эти значения в наш массив результатов. В первый раз мы добавляем 1,2,3 к нашим результатам. Теперь у нас осталась эта матрица:

Легкая часть сделана, что теперь?

Теперь нам нужно получить доступ к 6 и 9…

Для этого мы можем сделать цикл for и взять последний индекс каждого подмассива.

arr.pop() удаляет последнее значение из каждого массива

Если val существует, мы хотим добавить это значение в наш массив результатов. Нам нужно проверить, есть ли значение, потому что может быть ситуация, когда подмассив в матрице пустой, но все еще существует, и мы не хотим добавлять к нашему результату undefined.

Теперь наш результат 1,2,3,6,9

Теперь нам нужно получить доступ к 8,7… нам нужно пройти назад по последнему массиву в матрице…

Затем мы инвертируем подмассив в матрице.

После завершения цикла for мы переворачиваем всю матрицу

Теперь у нас есть наша матрица в правильном порядке для доступа к следующим числам 8,7

Цикл while продолжается до второй итерации

Результат становится 1,2,3,6,9,8,7

и наша матрица: [5,4]

Результат становится 1,2,3,6,9,8,7,4

и наша матрица: [5]

Еще раз через наш цикл while 5 будет добавлено с помощью matrix.shift(), цикл for не будет запущен, потому что матрица пуста, цикл while завершится, и у нас останется спиральный результат.

результат = [1,2,3,6,9,8,7,4,5]