• Как транспонировать матрицу не используя циклы?

    @pekc83
    const transpose = matrix => matrix[0].map((col, i) => matrix.map(row => row[i]));
    
    const baseMatrix = [[1, 2], [3, 4], [5, 6]];
    const transposedMatrix = transpose(baseMatrix);
    // [ [ 1, 3, 5 ], [ 2, 4, 6 ] ]
    Ответ написан
    3 комментария
  • Как транспонировать матрицу не используя циклы?

    @Quilin
    Full-stack разработчик
    В 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


    Обратите внимание на то, что при транспонировании матрицы важно копировать содержимое служебного массива, в противном случае данные, модифицированные в оригинальной матрице будут отражаться и в транспонированной матрице.
    Ответ написан
    Комментировать