Javascript函数返回数组,但仅返回最后一个数组

时间:2019-11-30 00:24:05

标签: javascript arrays function matrix

我尝试制作一个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的工作方式吗?

1 个答案:

答案 0 :(得分:1)

您的问题是,您正在将一个数组设置为另一个数组的第一个元素。

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++) {
            }
        }
    }