[英]Javascript function returning array but only the last array
我嘗試制作一個 JavaScript 函數來展示使用高斯方法求解線性方程組的步驟。 到目前為止我得到了什么(高斯消元法的一小部分,構造前導零):
let mt = [[2, 3, -1, 5], [4, 0, -3, 3], [-2, 3, -1, 1]];
gaussMethod(mt);
function gaussMethod(mtx) {
window.GaussMatrixSteps = [];
window.GaussMatrixSteps[0] = mtx;
let n = mtx.length;
for (i = 0; i < n; i++) {
for (k = i + 1; k < n; k++) {
var multiplier = mtx[k][i] / mtx[i][i];
for (j = 0; j <= n; j++) {
mtx[k][j] = mtx[k][j] - mtx[i][j] * multiplier;
}
}
window.GaussMatrixSteps[i + 1] = mtx;
}
}
我得到的是, window.GaussMatrixSteps
是一組相同的矩陣(最后一步),而不是來自不同步驟的不同矩陣。 這真的是 JavaScript 的工作原理嗎?
您的問題是您將一個數組設置為另一個數組的第一個元素。
let mt = [[2, 3, -1, 5], [4, 0, -3, 3], [-2, 3, -1, 1]];
gaussMethod(mt);
function gaussMethod(mtx) {
window.GaussMatrixSteps = [];
window.GaussMatrixSteps[0] = mtx; // issue is here
let n = mtx.length;
你正在創造這個
[0] = [[2, 3, -1, 5], [4, 0, -3, 3], [-2, 3, -1, 1]]
[1] = null
您需要做的是刪除對第一個數組的引用或僅重用該數組。
您還需要養成使用let
或const
聲明所有變量的習慣,並避免使用window
對象作為變量占位符。 因此,您可以在函數中使用私有變量並像這樣返回它:
const GaussMatrixSteps = gaussMethod(mt);
function gaussMethod(mtx) {
const GaussMatrixSteps = [];
GaussMatrixSteps[0] = mtx;
... CODE HERE
return GaussMatrixSteps;
}
另外,不要忘記像這樣聲明內部 for 循環變量:
for (let i = 0; i < n; i++) {
for (let k = i + 1; k < n; k++) {
for (let j = 0; j <= n; j++) {
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.