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-我在回答的末尾添加了一个示例,创建一个新数组并返回它。