Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавление в многомерный массив (https://javascript.ru/forum/misc/60250-dobavlenie-v-mnogomernyjj-massiv.html)

GrEb 19.12.2015 11:44

Добавление в многомерный массив
 
Привет, коллеги!
Задача такая: есть таблица, нужно добавлять в нее строки - снизу или сверху. Поскольку push и unshift работали неправильно, упростил максимально, пароноидально выкинул все циклы, дабы не было сомнений. Почему вариант 1 работает неправильно, а вариант 2 - как ожидается, Что не так?
1.
<script>
var arr1 = [[22,1,2],[33,4,5],[44,7,8]];

    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

var oneLASrow = [55,-1,-1];
    arr1[3] = oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

    oneLASrow[0] = 66;
    arr1[4]= oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

    oneLASrow[0] = 77;
    arr1[5] = oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);
</script>


2.
<script>
var arr1 = [[22,1,2],[33,4,5],[44,7,8]];

    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

var oneLASrow = [55,-1,-1];
    arr1[3] = oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

    oneLASrow = [66,-1,-1];
    arr1[4]= oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);

    oneLASrow = [77,-1,-1];
    arr1[5] = oneLASrow;
    console.log(arr1[0]);
    console.log(arr1[1]);
    console.log(arr1[2]);
    console.log(arr1[3]);
    console.log(arr1[4]);
    console.log(arr1[5]);
</script>


Спасибо!

рони 19.12.2015 12:09

GrEb,
1 вариант строки 12, 21, 30 указывают на один и тотже обьект , в втором варианте обьекты разные.
https://learn.javascript.ru/object-reference

рони 19.12.2015 12:17

GrEb, вариант ...
var arr1 = [[22,1,2],[33,4,5],[44,7,8]];
var oneLASrow = [55,-1,-1];
    arr1[3] = oneLASrow.slice();
    oneLASrow[0] = 66;
    arr1[4]= oneLASrow.slice();
    oneLASrow[0] = 77;
    arr1[5]= oneLASrow.slice();
   alert(JSON.stringify(arr1));

GrEb 19.12.2015 12:38

Спасибо! То что нужно! Теперь все ясно стало - массив oneLASrow передается в массив arr1 по ссылке, а не значению!


Часовой пояс GMT +3, время: 02:10.