Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS函数中的引用数组_Javascript_Arrays_Function_Reference - Fatal编程技术网

Javascript JS函数中的引用数组

Javascript JS函数中的引用数组,javascript,arrays,function,reference,Javascript,Arrays,Function,Reference,我正在写一些脚本,所以出现了下一个问题。 我有多个功能: A返回布尔,B和C不返回任何内容 if (A(array1, array2, array3, int1, int2, int3, int4, bool)) { B(array1, array2, array3, int1, int2, int3, int4, bool); } B看起来像: B(array1, array2, array3, int1, int2, int3, int4, bool){ C

我正在写一些脚本,所以出现了下一个问题。 我有多个功能:
A
返回布尔,
B
C
不返回任何内容

if (A(array1, array2, array3, int1, int2, int3, int4, bool)) {
        B(array1, array2, array3, int1, int2, int3, int4, bool);
    }
B
看起来像:

B(array1, array2, array3, int1, int2, int3, int4, bool){
    C(array1, array2, array3, int1, int2, int3, int4, bool);
    someCode;
}
C(array1, array2, array3, int1, int2, int3, int4, bool){
    array1 = thisFunctionChangesArrayInside(array1, some, parameters);
    array2 = thisAnotherFunctionChangesArrayInside(array2, some, parameters);
    someCode;
}
C
看起来像:

B(array1, array2, array3, int1, int2, int3, int4, bool){
    C(array1, array2, array3, int1, int2, int3, int4, bool);
    someCode;
}
C(array1, array2, array3, int1, int2, int3, int4, bool){
    array1 = thisFunctionChangesArrayInside(array1, some, parameters);
    array2 = thisAnotherFunctionChangesArrayInside(array2, some, parameters);
    someCode;
}
thisFunctionChangesArrayInside()
thisAnotherFunctionChangesArrayInside()
都返回数组

为什么不正确?(为什么阵列不改变?)

编辑:

此函数更改RAYINDER
此其他函数更改RAYINDER
函数:

function nowaPozycjaKolor(kolor, x1, y1, x2, y2) {
    var pomocniczaKolor = new Array();       //tablica zupełnie pomocnicza
    for (var i = 0; i < 8; i++) {            //ona reprezentuje kolory
        pomocniczaKolor[i] = new Array();
        for (var j = 0; j < 8; j++) {
            pomocniczaKolor[i][j] = kolor[i][j];
        }
    }
    pomocniczaKolor[x2][y2] = pomocniczaKolor[x1][y1];
    pomocniczaKolor[x1][y1] = 0;
    return pomocniczaKolor;
}

function nowaPozycjaFigur(figury, x1, y1, x2, y2) {
    var pomocniczaFigur = new Array();       //tablica zupełnie pomocnicza
    for (var i = 0; i < 8; i++) {            //ona reprezentuje figury
        pomocniczaFigur[i] = new Array();
        for (var j = 0; j < 8; j++) {
            pomocniczaFigur[i][j] = figury[i][j];
        }
    }
    pomocniczaFigur[x2][y2] = pomocniczaFigur[x1][y1];
    pomocniczaFigur[x1][y1] = 0;
    return pomocniczaFigur;

}

这几乎是我想要的:

function makeNewArray(x) {
        // make copy of array passed in
        var y = x.slice(0);
        // modify the copy
        y[3]=10;
        y[4]=20;
        return y;
    }

    function funkcja(a){
        a = makeNewArray(a);
    }

    var arr = [1,2,3];
    alert(arr);                 // [1,2,3]
    funkcja(arr);
    alert(arr);                 // [1,2,3]   
    alert(makeNewArray(arr));   // [1,2,3,10,20]
    alert(arr);                 // [1,2,3]
    arr = makeNewArray(arr);
    alert(arr);                 // [1,2,3,10,20]
已解决:

function makeNewArray(x) {
    // make copy of array passed in
    var y = x.slice(0);
    // modify the copy
    y[3]=10;
    y[4]=20;
    return y;
}

function funkcja(a){
    for(var i=0;i<5;i++){
        a[i] = makeNewArray(a)[i];
        //alert(a[i]);
        }
}

var arr = [1,2,3,4,5];
alert(arr);                 // [1,2,3]
funkcja(arr);
alert(arr);                 // [1,2,3,10,20]   
alert(makeNewArray(arr));   // [1,2,3,10,20]
alert(arr);                 // [1,2,3,10,20]
arr = makeNewArray(arr);
alert(arr);                 // [1,2,3,10,20]
函数makeNewArray(x){
//制作传入数组的副本
变量y=x.slice(0);
//修改副本
y[3]=10;
y[4]=20;
返回y;
}
函数funkcja(a){

对于(var i=0;i假设您发布的是伪代码,问题在于C不会更改它正在传递的数组。相反,它会为保存数组的变量分配新的值,这是不同的。JavaScript没有指针,数组引用是按值传递的(如果这听起来让人困惑,请参阅).

如果希望更改作为参数传递的数组,则必须修改数组,而不是为参数变量赋值

将数组或对象作为函数参数传递会生成一个新变量(函数的参数),并将该变量放入原始数组或对象的ptr

因此,如果您使用该参数修改数组或对象,则原始数组或对象将通过指向原始对象的指针进行修改。但是,如果您为该参数指定了新值,则它现在只是一个指向不同对象的变量。另一个变量没有更改,仍然指向原始对象,但新变量现在指向一个新对象,这两个对象不再有任何共同点

修改传递的数组:

var arr = [];
function modifyMyArray(x) {
   // change the array that was passed
   x.push(1);
}
modifyMyArray(arr);
console.log(arr.length);   // shows 1
为参数值指定其他值:

var arr = [];
function modifyMyArray(x) {
   // assign the argument variable to hold a different array
   // does not affect arr
   x = [1,2,3];
}
modifyMyArray(arr);
console.log(arr.length);   // shows 0
在函数外部,其工作方式相同:

var arr = [1,2,3];
var x = arr;
console.log(x);    // shows [1,2,3] because x contains a ptr to the same array as arr
x = ["a", "b"];
console.log(arr);  // show [1,2,3] because x has just been assigned a different array
                   //    and arr was unaffected by that assignment

要创建新数组并返回它,请执行以下操作:

function makeNewArray(x) {
    // make copy of array passed in
    var y = x.slice(0);
    // modify the copy
    y.push(10);
    y.push(20);
    return y;
}

var arr = [1,2,3];
var z = makeNewArray(arr);
console.log(z);     // [1,2,3,10,20]    

这看起来不像JS。这不是代码本身。我认为函数名是错误的,它可能是
This另一个函数在另一个真正伟大的
函数中更改,因为
array1
array2
都是局部变量。为局部变量指定新值不会更改变量的值你作为参数传递。那么我应该在C中创建新的局部数组并在循环中为它们分配所有新变量吗?事实上,问题在于C调用的函数,所以你必须向我们展示它们的代码。好吧,我的答案是:两个函数都不修改传入的数组(kolor和figury)。它们只返回新数组。很抱歉,没有说得更具体,但我不确定您想做什么。请参阅我链接的问题,它应该可以澄清您出现此问题的原因。如果我不需要这些函数返回任何内容,这将对我有所帮助,但它们只需返回这些数组而不是覆盖它们,因为有时我会使用它们覆盖一个数组,有时只覆盖一个。还有其他想法吗?@user3103257-您有多种选择。1)您可以修改传入的现有数组(从而修改原始数组).2)您可以创建一个新数组并返回它。3)您可以创建传入数组的副本,修改该副本并返回它。您可以根据希望给定函数执行的操作对其中任何一项进行编码。除了解释数组作为参数传递的工作原理(我已经完成了)之外,我不确定您还有什么其他问题。我很想创建一个新数组,如果它有效的话返回它…我想我会让它们保持原样,并编写两个新的数组,使用这些数组修改现有数组(左)函数。但现在是凌晨2:30。晚安。@user3103257-我在回答的末尾添加了一个示例,创建一个新数组并返回它。