Сегодняшняя проблема - забавная! Давайте посмотрим на спиральную матрицу.
Таким образом, вопрос заключается в том, чтобы мы манипулировали нашей матрицей таким образом, чтобы мы возвращали результат, который является «спиральным» порядком нашей исходной матрицы. Давайте попробуем и посмотрим, есть ли шаблон, который мы можем использовать, чтобы помочь нам решить эту проблему. Глядя на вывод, мы знаем, что первое, что мы должны сделать, это взять верхний массив в нашей матрице и добавить его к результатам. Нам нужно будет каким-то образом продолжать движение по нашей матрице. Цикл 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]