Я пишу сценарий и возникла следующая проблема. У меня есть несколько функций: A
возвращает bool, B
и C
ничего не возвращает.Справочные массивы в JS-функциях
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
выглядит следующим образом:
C(array1, array2, array3, int1, int2, int3, int4, bool){
array1 = thisFunctionChangesArrayInside(array1, some, parameters);
array2 = thisAnotherFunctionChangesArrayInside(array2, some, parameters);
someCode;
}
Оба thisFunctionChangesArrayInside()
и thisAnotherFunctionChangesArrayInside()
возвратов массивов.
Почему это неправильно? (Почему массивы не меняются?)
EDIT:
thisFunctionChangesArrayInside
и thisAnotherFunctionChangesArrayInside
функции:
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 nowaPozycjaKolor(kolor, x1, y1, x2, y2) {
kolor[x2][y2] = kolor[x1][y1];
kolor[x1][y1] = 0;
return kolor;
}
function nowaPozycjaFigur(figury, x1, y1, x2, y2) {
figury[x2][y2] = figury[x1][y1];
figury[x1][y1] = 0;
return figury;
}
Этот almos т работает, как я хочу:
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]
Это не похоже на JS. – elclanrs
Это не сам код. –
Я думаю, что имя функции неверно, вероятно, должно быть 'thisAnotherFunctionChangesArrayInsideTheOtherFunctionThatIsReallyGreat' – adeneo