Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.11.2008, 11:26
ilya_ вне форума Посмотреть профиль Отправить личное сообщение для ilya_ Найти все сообщения от ilya_
  № 1  
Ответить с цитированием
ilya_

Регистрация: Nov 2008
Сообщений: 6
По умолчанию Метод Array.splice()

Привет!
В цикле использую метод Array.splice(), но он неправильно работает или я неправильно делаю
Код:
a=[[1,1,1],[2,2,2],[3,3,3]]
b=[]
for(i=0;i<3;i++){
	b[0]=i
	b[1]=i
	b[2]=i
	trace(b)			
	a.splice(i,0,b)		
	trace(a)
}
вот какой результат выдаёт
0,0,0
0,0,0,1,1,1,2,2,2,3,3,3
1,1,1
1,1,1,1,1,1,1,1,1,2,2,2,3,3,3
2,2,2
2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,3,3,3

а вот что по моей логике должно быть
0,0,0
0,0,0,1,1,1,2,2,2,3,3,3
1,1,1
0,0,0,1,1,1,1,1,1,2,2,2,3,3,3
2,2,2
0,0,0,1,1,1,2,2,2,1,1,1,2,2,2,3,3,3

Подскажите что не так.

Старый 13.11.2008, 11:43
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Массив после после цикла по сути выглядит так
a=[b,b,b,[1,1,1],[2,2,2],[3,3,3]]
где b массив равный в конце [2,2,2], вот и получаете 2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,3,3,3
Код AS1/AS2:
a = [[1, 1, 1], [2, 2, 2], [3, 3, 3]];
for (var i = 0; i < 3; i++) {
	a.splice (i, 0, [i, i, i]);
	trace (a);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 13.11.2008, 11:55
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 3  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
вот здесь:
Код AS1/AS2:
a.splice(i,0,b)
вы добавляете в массив а ссылку на массив b, но не его содержимое, а в следующей итерации вы меняете содержимое b, оно меняется и в а, потому что там хранится ссылка на b. надеюсь примерно понятно объяснил
спасет вам например так:
Код AS1/AS2:
a=[[1,1,1],[2,2,2],[3,3,3]]
b=[]
for(i=0;i<3;i++){
        b = new Array()
	b[0]=i
	b[1]=i
	b[2]=i
	trace(b)			
	a.splice(i,0,b)		
	trace(a)
}
но в памяти при этом у вас будет храниться 3 разных объекта b. я бы по другому как-нибудь это сделал.

Старый 27.02.2009, 21:33
edge1 вне форума Посмотреть профиль Отправить личное сообщение для edge1 Найти все сообщения от edge1
  № 4  
Ответить с цитированием
edge1
 
Аватар для edge1

Регистрация: Apr 2008
Сообщений: 23
Цитата:
Сообщение от Alkaz Посмотреть сообщение
вот здесь:
Код AS1/AS2:
a.splice(i,0,b)
вы добавляете в массив а ссылку на массив b, но не его содержимое
А как добавить в массив a содержимое массива b?

Старый 27.02.2009, 23:05
Fatality вне форума Посмотреть профиль Отправить личное сообщение для Fatality Найти все сообщения от Fatality
  № 5  
Ответить с цитированием
Fatality
 
Аватар для Fatality

Регистрация: Jan 2009
Адрес: Одесса
Сообщений: 309
Отправить сообщение для Fatality с помощью ICQ
Код AS1/AS2:
a.splice(i,0,b.slice());

Старый 02.03.2009, 12:34
edge1 вне форума Посмотреть профиль Отправить личное сообщение для edge1 Найти все сообщения от edge1
  № 6  
Ответить с цитированием
edge1
 
Аватар для edge1

Регистрация: Apr 2008
Сообщений: 23
Цитата:
Сообщение от Fatality Посмотреть сообщение
Код AS1/AS2:
a.splice(i,0,b.slice());
Масло масленное? Splice в упор не желает работать с b как с массивом.

ps: Хочу уточнить что я использую ас3.

Добавлено через 36 минут
Вообще что-то странное творится.
Код AS3:
			trace( b.length );
			trace( a.length );
			var c : Array = new Array();
			c = a.splice( 4 );
			trace( c.length );
			a.concat( b );
			a.concat( c );
			trace( a.length );
Выдает следущее:
4
31
27
4

Добавлено через 1 час 3 минуты
В результате результат был достигнут:
Код AS3:
			var c : Array = new Array();
			c = a.splice( 4 );
			b.forEach( pushElement );
			c.forEach( pushElement );
			function pushElement( element : *, index: int, array: Array ) : void
			{
				a.push( element );
			}


Последний раз редактировалось edge1; 02.03.2009 в 13:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.