Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вычленить пустые значения из массива (http://www.flasher.ru/forum/showthread.php?t=210818)

Фомич 09.05.2015 17:15

Вычленить пустые значения из массива
 
Приветствую, товарищи! C праздником!
Требуется из массива убрать все пустые ячейки
[1,,,,2,,,3,,,...,,,100] --> [1,2,3...100]

По какой-то удаленной от меня причине данный код их не сносит

Код AS3:

 
 var result:Array = new Array();
 
for (var f:int = 0; f < 100000; f++ )
{
        if ( array[f] != null )
                          {
                            result.push( array[f] );
                          }
}       
trace(result);


OlmerDale 09.05.2015 17:19

Код AS3:

var array:Array = [];
var length:int = array.length;
 
while (length-- > 0)
{
        if (array[length] == null)
        {
                array.splice(length, 1);
        }
}


Фомич 09.05.2015 17:28

Тестирую так(это стилизованный пример из кода с которым работаю)-
Код AS3:

var array:Array = [];
var txt:String="%%%%%%111%%%%%%abc%d%";
 
 
        array=txt.split("%")
 
 
var length:int = array.length;
 
while (length-- > 0)
{
        if (array[length] == null)
        {
                array.splice(length, 1);
        }
}
trace(array);

выдает ,,,,,,111,,,,,,abc,d, то бишь не работает

OlmerDale 09.05.2015 17:32

Так это и не null, это пустая, но строка! Как например 0.

Добавлено через 32 секунды
Вопрос конкретизируйте.

Добавлено через 3 минуты
Получается что массив не пустой, а наполнен пустыми строками.
Если в массиве у Вас только строки, а должны быть только они,
то уберите проверку на null и поставьте '' проверку на пустую строку.

caseyryan 09.05.2015 17:45

Код AS3:

var txt:String = "%%%%%%111%%%%%%abc%d%";
var array:Array = txt.replace(/((^%+)|(%$))/g, "").replace(/%+/g, ",").split(",");
trace(array); // 111,abc,d


OlmerDale 09.05.2015 18:05

caseyryan, у меня в подписи ссылка для голосования за редактор.
Я когда его увидел очень обрадовался, ведь у ms очень быстрые ide которые написаны на c*.
Но когда я в него залез, то оказалось, что написан он на движке atom от githab, который написан на ноде,
которая вроде и быстрая, но редактор получился отстойным и лагающим.
А создавали атом для того, чтобы дать шанс не знающим питон писать плагины для своего редактора.
И именно эта благая идея погубила труд. Ведь в js очень хорошем тоном считается вот такая запись как У Вас, которая кстате была рубистыми привита. И вот значит рубисты хвастаются тем, как быстро они пишут код, а js разработчики слушают и уже представляют как они будут писать так же и даже стиль джедайским назвали. Но суть в том, что js делают сайты, в которых клики или какие-то события бывают очень редко и этот стиль прокатывает.

Но сейчас когда началась эра соккетов и сайтов аля флеш (без перезагрузки), они сотнями начали отмирать из-за такого подхода и им снова приходится переучиваться.

А as3 уж тем более требует знания оптимизации и получить в начале пути такой вот ответ от опытного коллеги, может причинить больше вреда чем пользы.

caseyryan 09.05.2015 18:47

OlmerDale, сначала приведите свой вариант решения проблемы, прежде, чем осуждать чей-то (от Вас уже 2 поста в этой теме, и оба мимо цели).
Вполне нормальный подход и нормальная запись. 2 регулярных выражения, довольно простых, а дальше объединение результата в массив.
Что касается голосования, то я всеми правдами и не правдами против. Ибо майкрософтовская вижуал студио - это какой-то мастодонт. Весит под 10 гигабайт, да еще и грузится по полчаса. Я лучше флешдевелоп буду использовать.

п.с. Но по большому счету это
Цитата:

Но сейчас когда началась эра соккетов и сайтов аля флеш (без перезагрузки), они сотнями начали отмирать из-за такого подхода и им снова приходится переучиваться.
И это
Цитата:

Ведь в js очень хорошем тоном считается вот такая запись как У Вас, которая кстате была рубистыми привита. И вот значит рубисты хвастаются тем, как быстро они пишут код, а js разработчики слушают и уже представляют как они будут писать так же и даже стиль джедайским назвали. Но суть в том, что js делают сайты, в которых клики или какие-то события бывают очень редко и этот стиль прокатывает.
Мне совершенно пофиг. Никем мне эта запись не была привита, никакими рубистами или кем-то еще. Руби я вообще не знаю и никогда не интересовался. С JS тоже работаю очень редко и что там считается хорошим тоном, а что плохим, не особо в теме. Так пишу, потому, что это реально удобно в определенных случаях (как этот).

OlmerDale 09.05.2015 19:08

caseyryan, ну если снять паутину с глаз, то можно заметить что моих сообщений ТРИ!
А если ещё немного поднапречься, то увидите что голосования не за vs.
Ну и раз Вам пофиг, то и мне как бы пофиг.

Ну и если Вы скажите что ответ мой не втему, то прочтите ещё раз вопрос, а потом посмотрите
где упомянулась пустая строка.

Фомич 09.05.2015 19:08

Цитата:

Сообщение от caseyryan (Сообщение 1182185)
Код AS3:

var txt:String = "%%%%%%111%%%%%%abc%d%";
var array:Array = txt.replace(/((^%+)|(%$))/g, "").replace(/%+/g, ",").split(",");
trace(array); // 111,abc,d



Так понимаю, это регулярное выражение? Честно говоря в них не силен. Если конкретизировать вопрос, то
имеется строка String, которую нужно избавить от пробелов и знаков %, и если от первых избавился путем убирания двойных и более пробелов, а затем сделал split(" "), то со вторыми проблема.
по сути ищу способ вот такое выражение:
txt:String="% %%Teкст% Ещетекст%Иещетекст % ";

преобразовать в:

array:Array=[Текст,Eщетекст,Иещетекст];

caseyryan 09.05.2015 20:11

Цитата:

что моих сообщений ТРИ!
Да хоть 10. Все равно решения вопроса в них нет. С удовольствием гляну на Ваше правильное и красивое решение. Но пока я его не наблюдаю. Так что хватит пустословить.
Цитата:

А если ещё немного поднапречься, то увидите что голосования не за vs.
Ну тогда тем более все равно, что там хотят / не хотят внедрить в майкрософте.

Цитата:

Так понимаю, это регулярное выражение? Честно говоря в них не силен. Если конкретизировать вопрос, то
имеется строка String, которую нужно избавить от пробелов и знаков %, и если от первых избавился путем убирания двойных и более пробелов, а затем сделал split(" "), то со вторыми проблема.
по сути ищу способ вот такое выражение:
txt:String="% %%Teкст% Ещетекст%Иещетекст % ";

преобразовать в:

array:Array=[Текст,Eщетекст,Иещетекст];
Тогда Вам надо просто обработать строку, приведя ее в правильный вид, а потом уже сделать массив из слов.

Код AS3:

var txt:String = "% %%Teкст% Ещетекст%Иещетекст % ";
// что происходит дальше: первая регулярка сносит все ненужные % и пробелы и заменяет их на один пробел
// второй проход убирает пробелы (любое количество) вначале и вконце строки
// ну а дальше просто делим это на массив по пробелам, которые остались
trace(txt.replace(/((\s+)|(%))/g, " ").replace(/(^\s+)|(\s+$)/g, "").split(/\s+/)); // Teкст,Ещетекст,Иещетекст

Наверняка все это можно сократить, и даже уложить в одну регулярку, если по-дольше поломать голову. Но приведенная задача таким способом решается


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

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