Я пытаюсь написать довольно простую функцию Javascript и испытываю поведение, которое я не понимаю, когда я повторяю функцию.проблема с вызовом функции javascript дважды
Я переделал проблему до следующей ситуации. Я хочу написать функцию, которая будет принимать в качестве входных данных массив, состоящий из массивов массивов, например. A = [[[1]]]
. Я не знаю стандартную терминологию для этого, поэтому я буду ссылаться на главный массив как «уровень 0», который имеет элементы, которые являются массивами «уровня 1». Я скажу, что массивы уровня 1 состоят из массивов «уровня 2». Массивы уровня 2 состоят из целых чисел.
Функция выполняет следующие действия на входе A
(уровень 0 массива):
- создать пустой массив
L
; - для каждого уровня 1 массив
M
вA
- добавить один к каждой записи целого числа в каждом массиве уровня 2 в
M
; - добавить две копии
M
вL
- добавить один к каждой записи целого числа в каждом массиве уровня 2 в
- возвращение
L
.
Вот мой код:
function myFunc(A){
var L = [];
for(var a=0; a<A.length; a++){
var M = A[a].slice(0);
for(var i=0; i<M.length; i++){
for(var j=0; j<M[i].length; j++){
M[i][j]++;
}
}
for(var s=0; s<2; s++){
var N = M.slice(0);
L.push(N);
}
}
return(L);
}
Теперь я проверить это:
var A = [[[1]]];
A = myFunc(A)
После этого, я получаю A = [[[2]],[[2]]]
, чего я ожидал. Однако предположим, что я перебирать его:
var A = [[[1]]];
A = myFunc(A);
A = myFunc(A);
Тогда я ожидаю получить A = [[[3]],[[3]],[[3]],[[3]]]
, но вместо этого у меня есть A = [[[4]],[[4]],[[4]],[[4]]]
.
С другой стороны, если я заведу myFunc([[[2]],[[2]]])
, я получаю ожидаемое [[[3]],[[3]],[[3]],[[3]]]
.
Я не понимаю, откуда это несоответствие.
Это не проблема. Функция, вызываемая дважды, не имеет одинаковых результатов, снова прочитайте его вопрос. Я расследую, и у меня есть лидерство. Думаю, –
Его вероятно ссылочное значение и скопированное. Попробуйте A = JSON.parse (JSON.stringify (A)) между вашими вызовами A = myFunct (A). Я не могу проверить, что я нахожусь на своем iPhone –
@FlavienVolken да, который решает эту проблему, но я не понимаю, почему она здесь не работает. : o –