В JavaScript не существует двумерных массивов, по сути матрица будет "вектором векторов". Обращение к элементу по его индексам будет выглядеть как-то так:
myMatrix[i][j]
.
Транспонирование матрицы в этом контексте вообще не имеет никакого смысла, ведь для этого достаточно просто поменять местами i и j. Я бы посоветовал написать фасад над работой с массивом, например так:
class Matrix {
constructor (arr, transposed) {
this._arr = arr
this._transposed = !!transposed
},
get (i, j) {
return this._transposed
? this._arr[j][i]
: this._arr[i][j]
},
transpose () {
return new Matrix(this._arr.map(row => row.slice()), true)
}
}
var matrixA = new Matrix([[1,2],[3,4],[5,6]])
matrixA.get(1, 0) // 3
var matrixB = matrixA.transpose()
matrixB.get(0, 1) // 3
Обратите внимание на то, что при транспонировании матрицы важно копировать содержимое служебного массива, в противном случае данные, модифицированные в оригинальной матрице будут отражаться и в транспонированной матрице.