Эта тема надеюсь многим помогла.
|
Всем привет!
Нужна помощь, казалось бы, в элементарной штуке. Упёрся в вот в это: var m; var mirror = []; var comb = [1,0,0]; mirror[0] = comb; for(var x = 0; x < 1; x++) { mirror[0][x] = comb[-1]; //m = comb[-1]; } alert(comb[0]); //undefined В общем, впервые столкнулся с тем, что переопределяется переменная (массив), находящаяся справа. Это дополнительный вопрос: как такое возможно? Если внутри цикла выполнить вторую строку, то переопределения элемента массива comb не происходит, то есть работает как полагается. Следовательно, на правую часть каким-то образом влияет многомерный массив слева... Мне нужно переопределить элемент многомерного массива значением из обычного массива. Основной вопрос: как, сохранив основную идею скрипта, избежать переопределения массива справа? Буду признателен за помощь. |
vitoff, а откуда у массива свойство -1? Оно и выдаёт undefined.
|
vitoff, Массив в javascript (да и почти везде) передается по ссылке, не по значению.
То есть технически в результате такой конструкции var comb = [1,0,0]; mirror[0] = comb; mirror - это не просто какой-то отдельный массив [[1,0,0]] Это [ссылка на массив comb]; То есть массив, первым элементом которого является та самая штука, которую вы присвоили, сама переменная, а не значение этой штуки. Более-менее ясно? Это кажется одна из вещей часто путающих новичков в программировании |
Цитата:
Цитата:
Просто раньше с таким не сталкивался, но припоминаю какую-то таблицу связей "переменная-значение". И если я правильно понимаю, то в моём случае mirror[0] не содержал своего значения, а была установлена связь с чужим значением, то есть с comb. Верно? И если верно, то может дадите идею, как это можно обойти, то есть как mirror[0] передать значение, а не связь? Цитата:
|
Цитата:
mirror[0] = comb.slice(); |
vitoff,
Цитата:
Цитата:
Цитата:
Подробнее смотри по ссылке выше. При непонимании можно попробовать прочитать весь раздел сначала Как обойти сказал Рони. Этой строчкой он создает копию массива и присваивает вашей переменной ее. (Однако нужно понимать что если элементами копируемого массива являются ссылки, то их эта штука тоже скопирует). |
Цитата:
var arr = [1,2, [3,4,5]], copy_arr = JSON.parse(JSON.stringify(arr)); arr[2][0] = 99999999; alert(arr); alert(copy_arr); |
Понимать что будет в результате достаточно, грузиться разными способами клонирования объекта и их отличием не надо (пока) =)
|
В общем, свою проблему я решил. Всех, благодарю за помощь.
А эту статью тоже теперь рекомендую новичкам, что бы не попадали в такие ситуации: Цитата:
|
Часовой пояс GMT +3, время: 20:40. |