Javascript 中的方阵转置
Square matrix transpose in Javascript
我正在尝试在 Javascript 中创建方阵转置函数,但它没有按预期工作。函数:
function transpose(){
var tmpCells = cells;
for(var i=0; i<boardHeight; i++){
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
clearCells();
drawCells();
}
创建奇怪的输出。它没有原始大小的新二维数组,而是遗漏了一些单元格,而不是 objects
的数组,它创建了不同大小的数组,其中包含 circular bjects
。如何解决这个问题以及我做错了什么?
JS fiddle link: https://jsfiddle.net/Ls8jbho3/
因为 tmpCells = cells
对现有对象进行新引用而不是复制该对象,所以 tmpCells[i][j] = cells[j][i]
与 cells[i][j] = cells[j][i]
完全相同。这是你所有问题的根源。
确保您的 tmpCells
不与 cells
共享结构,问题就会消失:
function transpose(){
var tmpCells = [];
for(var i=0; i<boardHeight; i++){
tmpCells[i] = [];
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
}
mathjs可以做到这一点。
这是示例:
var A = [[1, 2, 3], [4, 5, 6]];
math.transpose(A); // returns [[1, 4], [2, 5], [3, 6]]
我正在尝试在 Javascript 中创建方阵转置函数,但它没有按预期工作。函数:
function transpose(){
var tmpCells = cells;
for(var i=0; i<boardHeight; i++){
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
clearCells();
drawCells();
}
创建奇怪的输出。它没有原始大小的新二维数组,而是遗漏了一些单元格,而不是 objects
的数组,它创建了不同大小的数组,其中包含 circular bjects
。如何解决这个问题以及我做错了什么?
JS fiddle link: https://jsfiddle.net/Ls8jbho3/
因为 tmpCells = cells
对现有对象进行新引用而不是复制该对象,所以 tmpCells[i][j] = cells[j][i]
与 cells[i][j] = cells[j][i]
完全相同。这是你所有问题的根源。
确保您的 tmpCells
不与 cells
共享结构,问题就会消失:
function transpose(){
var tmpCells = [];
for(var i=0; i<boardHeight; i++){
tmpCells[i] = [];
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
}
mathjs可以做到这一点。 这是示例:
var A = [[1, 2, 3], [4, 5, 6]];
math.transpose(A); // returns [[1, 4], [2, 5], [3, 6]]