JS正在更改2d数组值,这可能是另一个干扰函数吗?

时间:2019-05-09 00:14:01

标签: javascript arrays

简短摘要:我已经写了一些填充二维数组的代码。当我显示此数组时,一切都完美。现在,我将此二维数组作为函数的参数。当我在

内部调用该函数时
document.getElementById('output').innerHTML = myFunction(int, array);

它显示正确的值。但是,我不想显示它们,我想进一步使用它们。当函数返回数组(一维)时,我尝试了

var my_result_array = myFunction(int, array);

我还尝试了push()和预定义的数组或仅访问单个元素。

问题是,一旦我在文档中调用了函数,作为参数给函数的数组就会发生变化!我注意没有类似的名称,但是我无法弄清楚为什么它总是更改我的参数数组,因此破坏了计算,但是如果我在document.getElementbyId部分中使用它就可以正常工作。

有什么建议吗?

编辑更多代码: 我会尽量保持简短和解释性。我正在创建一个mat_dimension_js

给定的空数组
var berechnungs_array = new Array(mat_dimension_js);
    for (var i = 0; i < mat_dimension_js; i++){ 
        berechnungs_array[i] = new Array(mat_dimension_js);
    }

然后我用值填充该数组。如果我打印数组,一切都很好,值就是它们所属的位置。然后,我将此数组输入myFunction()

很抱歉,我也尝试过它而没有再次创建数组A。 然后,我尝试按上述方法获取myFunction()的输出,但是,一旦这样做,我作为参数给定的数组就会以某种方式改变。

1 个答案:

答案 0 :(得分:0)

JavaScript中的数组通过引用传递,这意味着对函数内部传递的数组所做的任何更改也将保存在实际数组中。

此外,A = mat_array; 不会创建mat_array的副本,而是创建指向它的另一个指针(这意味着两个变量在内部均指完全相同的数组对象)。

要正确地复制1D数组,请调用.slice(0)。但是,对于2D阵列,您需要递归执行此操作。

请参见Javascript passing arrays to functions by value, leaving original array unaltered

What is the most efficient way to deep clone an object in JavaScript?