簡體   English   中英

Javascript函數返回數組但只返回最后一個數組

[英]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

您需要做的是刪除對第一個數組的引用或僅重用該數組。


您還需要養成使用letconst聲明所有變量的習慣,並避免使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM