54-spiralOrder.js 1019 Bytes
/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    let rs = [];
    while (matrix.length) {
        // right
        if (matrix.length) {
            rs = rs.concat(matrix.shift());
        }
        console.info('after right matrix', matrix)

        // down
        matrix.forEach(m => {
            let t = m.pop();
            (t !== void 0) && rs.push(t);
        });
        console.info('after down matrix', matrix);

        // left
        if (matrix.length) {
            rs = rs.concat(matrix.pop().reverse());
        }
        console.info('after left matrix', matrix);

        //
        for (let i=0;i<matrix.length;i++) {
            // console.info('===>', matrix, [matrix.length-1-i], matrix.length-1-i)
            let t = matrix[matrix.length-1-i].shift();
            (t !== void 0) && rs.push(t);
        }
        console.info('matrix', matrix);
    }
    
    return rs;
};

console.info(spiralOrder([
    [1],
    [5],
    [9],
    [13]
  ]));