Добавление в многомерный массив
Привет, коллеги!
Задача такая: есть таблица, нужно добавлять в нее строки - снизу или сверху. Поскольку 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>
Спасибо! |
GrEb,
1 вариант строки 12, 21, 30 указывают на один и тотже обьект , в втором варианте обьекты разные. https://learn.javascript.ru/object-reference |
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));
|
Спасибо! То что нужно! Теперь все ясно стало - массив oneLASrow передается в массив arr1 по ссылке, а не значению!
|
| Часовой пояс GMT +3, время: 04:41. |