Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2015, 16:51   #1
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию Передать массив в функцию

Доброго времени суток добрым людям!

Прошу помощи!

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

Код:
        <script type="text/javascript">
		var mas=[5,6,7]
		var mas2=[3,4,5]
		
		function DoIt()
		{
		  alert(mas[0]+';'+mas[1]+';'+mas[2])
		  var mas2=EditArray(mas)
		  alert(mas[0]+';'+mas[1]+';'+mas[2])
		}
		
		function EditArray(ms)
		{
		  ms[0]=0
		  ms[1]=1
		  ms[2]=2
		  return ms
		}		
		</script>
надо чтобы mas остался прежним после выполнения функции. А получается, что функция изменяет mas

Что-то нагуглить не смог, если что и нашел, то все вокруг, да около...
Костян Пират вне форума Ответить с цитированием
Старый 05.05.2015, 17:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

массив передаётся по ссылке. поэтому, если его изменять внутри функции, то будет изменяться и исходный.

а зачем вам это, поясните на примере.
чем не устраивает, например:
Код:
		function EditArray(ms)
		{
                  var msTemp = [];
		  msTemp[0]=0
		  msTemp[1]=1
		  msTemp[2]=2
		  return msTemp;
		}
ну, или даже так:
Код:
		function EditArray(ms)
		{
                  var ms = [];
		  ms[0]=0
		  ms[1]=1
		  ms[2]=2
		  return ms;
		}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.05.2015, 17:57   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Метод slice без аргументов скопирует массив, но если элементы будут объектами (не простыми величинами), то ссылаться два массива будут на одни и те же объекты.
Ну и не забываем про функциональщину: мэпы, редьюсы, форычи.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 06.05.2015, 01:15   #4
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
массив передаётся по ссылке. поэтому, если его изменять внутри функции, то будет изменяться и исходный.
Приведенный код это просто для примера, и простое присвоение значений в функции для того чтобы отследить изменения - на простом примере легче понять смысл.
Собственно мне нужно понять, как сделать так, чтобы передавать в функцию только значения из массива, чтобы сам передаваемый массив не менялся. Есть ли способ передать не как ссылку?

Цитата:
Сообщение от Naive Посмотреть сообщение
Метод slice без аргументов скопирует массив, но если элементы будут объектами (не простыми величинами), то ссылаться два массива будут на одни и те же объекты.
Ну и не забываем про функциональщину: мэпы, редьюсы, форычи.
можно для неискушенных поподробнее?

Последний раз редактировалось Вадим Мошев; 06.05.2015 в 01:17.
Костян Пират вне форума Ответить с цитированием
Старый 06.05.2015, 04:04   #5
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Есть ли способ передать не как ссылку?
Дак передавай как ссылку и клонь массив внутри функции, либо че-нибудь функциональное типа мэпа:
Код:
var myArr = [0,1,2,3];

console.log( setMyArr(myArr) ); // [0,2,4,6]
console.log( myArr ); // [0,1,2,3]
console.log( myArr.map( mapOption ) ); // [0,2,4,6]
console.log( myArr ); // [0,1,2,3]

function setMyArr( oldArr ){
  var newArr = oldArr.slice();
  for (var i = newArr.length; i--;) {
    newArr[i] *= 2;
  };
  return newArr;
};

function mapOption( item ){
  return item*2;
};
без конкретной задачи трудно подсказать, способов миллионы.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 06.05.2015, 09:03   #6
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

Спасибо!
Так подойдет
Костян Пират вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать двумерный массив в функцию для заполнения данными | C++ marenko.lilia Общие вопросы C/C++ 25 03.09.2014 19:19
Передать Variant и Массив в функцию VBA sir.andrey Помощь студентам 0 13.04.2013 06:23
Передать неинициализированный двухмерный динамический массив в функцию zorg-kirill Общие вопросы C/C++ 3 02.03.2013 19:44
как можно передать массив по ссылке в функцию в java? videolord Общие вопросы по Java, Java SE, Kotlin 1 03.11.2011 18:21
Как передать Динамический массив в функцию? RainCat Помощь студентам 4 13.04.2011 11:25