Странное поведение Передача и многомерный массив в качестве входных данных для функции JavaScript изменяет фактические значения массива? пожалуйста - PullRequest
0 голосов
/ 08 октября 2019

Я создал переменную многомерного массива типа в JavaScript и утешаю ее перед отправкой в ​​функцию, но она выводит неверный вывод на консоль, но если я удаляю функцию, все прекрасно работает

function ROT(a, d) {
    return a ^ d;
}

function thetha_step(A) {

    const C = [];
    const D = []; 
    //C[x] part 
    for (let x=0; x<5; x++) {
         C[x] = A[x][0];
         for (let y=1; y<5; y++) {
            C[x] = C[x] ^ A[x][y];
         }
    }

    //D[x] part
    D[0] = C[4] ^ ROT(C[1], 1);
    for (let x=1; x<5; x++) {
       D[x] = C[x-1] ^ ROT(C[x+1], 1);
    }

    //A[x,y]
    for (let x=0; x<5; x++) {
         for (let y=0; y<5; y++) {
             A[x][y] = A[x][y] ^ D[x];
         }
    }

    return A;
}


var bin= [
    [1, 0, 0, 0, 1],
    [0, 1, 0, 0, 0],
    [0, 0, 1, 1, 1],
    [1, 0, 1, 1, 1],
    [1, 0, 1, 0, 1]
];


console.log(bin);

console.log(thetha_step(bin));
# Outputs as #

(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]
0: (5) [2, 3, 3, 3, 2]
1: (5) [2, 3, 2, 2, 2]
2: (5) [1, 1, 0, 0, 0]
3: (5) [2, 3, 2, 2, 2]
4: (5) [1, 0, 1, 0, 1]

(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]
0: (5) [2, 3, 3, 3, 2]
1: (5) [2, 3, 2, 2, 2]
2: (5) [1, 1, 0, 0, 0]
3: (5) [2, 3, 2, 2, 2]
4: (5) [1, 0, 1, 0, 1]

Я не понимаю, почему не отображаются правильные значения переменных бина, но когда я удаляю функцию, все отображаются правильно. Пожалуйста, помогите мне, где я иду не так.

1 Ответ

0 голосов
/ 08 октября 2019

Здесь объединяются две вещи.

Во-первых, массивы являются объектами и поэтому передаются «по ссылке». Когда вы изменяете A внутри функции, вы фактически изменяете тот же массив, который находится в bin, а не его копию.

Во-вторых, консоль браузера отображает «живые» объекты - когдасодержимое объекта меняется, меняется и консольный дисплей.

Если вы хотите зафиксировать значение bin, как оно было при его выводе, попробуйте сделать это вместо этого:

console.log(JSON.stringify(bin));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...