猿问

在javascript中交换矩阵的列(换位)

例如,我有一个像这样的矩阵:


|1 2 3|    

|4 5 6|

|7 8 9|

我需要它转换成这样的矩阵:


|1 4 7|    

|2 5 8|

|3 6 9|

实现这一目标的最佳和最佳方式是什么?


jeck猫
浏览 394回答 3
3回答

天涯尽头无女友

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

波斯汪

DuckDucking打开了这个由肯。令人惊讶的是,它比尼基塔的答案更加简洁和完整。它在内核中隐式检索列和行长度map()。function transpose(a) {&nbsp; &nbsp; return Object.keys(a[0]).map(function(c) {&nbsp; &nbsp; &nbsp; &nbsp; return a.map(function(r) { return r[c]; });&nbsp; &nbsp; });}console.log(transpose([&nbsp; &nbsp; [1,2,3],&nbsp; &nbsp; [4,5,6],&nbsp; &nbsp; [7,8,9]]));

潇湘沐

就像任何其他语言一样:int[][] copy = new int[columns][rows];for (int i = 0; i < rows; ++i) {&nbsp; &nbsp; for (int j = 0; j < columns; ++j) {&nbsp; &nbsp; &nbsp; &nbsp; copy[j][i] = original[i][j];&nbsp; &nbsp; }}您只需在JS中以不同方式构造2D数组。像这样:function transpose(original) {&nbsp; &nbsp; var copy = [];&nbsp; &nbsp; for (var i = 0; i < original.length; ++i) {&nbsp; &nbsp; &nbsp; &nbsp; for (var j = 0; j < original[i].length; ++j) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // skip undefined values to preserve sparse array&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (original[i][j] === undefined) continue;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // create row if it doesn't exist yet&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (copy[j] === undefined) copy[j] = [];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // swap the x and y coords for the copy&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; copy[j][i] = original[i][j];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return copy;}console.log(transpose([&nbsp; &nbsp; [1,2,3],&nbsp; &nbsp; [4,5,6],&nbsp; &nbsp; [7,8,9]]));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答