Given an m x n matrix, return all elements of the matrix in spiral order.
m == matrix.lengthn == matrix[i].length1 <= m, n <= 10100 <= matrix[i][j] <= 100Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:

Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let result = [];
while (matrix.length) {
// Add the first row
result = result.concat(matrix.shift());
// Add the rightmost column
for (let i = 0; i < matrix.length; i++) {
let row = matrix[i];
if (row.length) {
result.push(row.pop());
}
}
// Add the last row in reverse order
let lastRow = matrix.pop();
if (lastRow) {
result = result.concat(lastRow.reverse());
}
// Add the leftmost column in reverse order
for (let i = matrix.length - 1; i >= 0; i--) {
let row = matrix[i];
if (row.length) {
result.push(row.shift());
}
}
}
return result;
};
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let res = [];
while(matrix.length) {
let curr = matrix.shift();
res.push(...curr);
for(let row of matrix) {
let end = row.pop();
if(end) {
res.push(end);
row.reverse()
}
}
matrix.reverse();
}
return res;
};
reverse() 매서드까지 쓸 줄은 몰랐다.

shift()와 pop() 메서드를 써야한다는 것은 떠올렸지만 반환결과가 제거된 배열을 반환한다는 사실을 생각하지 못해서 쓰지 않고 다른 방법을 시도했다. 애매할땐 찾아보고 직접 해보는게 가장 중요하다.