Search code examples
javascriptmatrixmultidimensional-arrayswap

Swap rows with columns (transposition) of a matrix in javascript


For instance I have a matrix like this:

|1 2 3|    
|4 5 6|
|7 8 9|

and I need it to convert into a matrix like this:

|1 4 7|    
|2 5 8|
|3 6 9|

What is the best and optimal way to achieve this goal?


Solution

  • See article: Transpose An Array In JavaScript and jQuery

    function transpose(a) {
    
      // Calculate the width and height of the Array
      var w = a.length || 0;
      var h = a[0] instanceof Array ? a[0].length : 0;
    
      // In case it is a zero matrix, no transpose routine needed.
      if(h === 0 || w === 0) { return []; }
    
      /**
       * @var {Number} i Counter
       * @var {Number} j Counter
       * @var {Array} t Transposed data is stored in this array.
       */
      var i, j, t = [];
    
      // Loop through every item in the outer array (height)
      for(i=0; i<h; i++) {
    
        // Insert a new row (array)
        t[i] = [];
    
        // Loop through every item per item in outer array (width)
        for(j=0; j<w; j++) {
    
          // Save transposed data.
          t[i][j] = a[j][i];
        }
      }
    
      return t;
    }
    
    console.log(transpose([[1,2,3],[4,5,6],[7,8,9]]));