Добавление в многомерный массив
Привет, коллеги!
Задача такая: есть таблица, нужно добавлять в нее строки - снизу или сверху. Поскольку 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, время: 02:10. |