Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: превращение массива в строку и обратно [2]
ТвойWeb » WebMaster класс » JavaScript » превращение массива в строку и обратно

Страниц (5): « 1 [2] 3 4 5 »
 

11. Дмитрий Б. - 20 Октября, 2005 - 02:07:47 - перейти к сообщению
Забыл уточнить: первый параметр - строка с названием переменной, второй - сама переменная...
12. kr12 - 22 Октября, 2005 - 14:02:53 - перейти к сообщению
Итого:
функция print_js создает компактную и удобную для понимания (визуального) строку, но не учитывает пропущенных элементов и ассоциативных элементов.
функция arrayToString правильно преобразует массив, но сильно увеличивается размер строки (для плотно заполненных массивов) и ухутшается читабельность.
Думаю наоснове комбинации этих функций создать некую функцию, которая сочиталабы их положительные качества, но не имела бы их недостатков.
Например для массива
CODE:
q=[0,1,2];q[5]=new Array();
q[5]=[50,51]
q[5]['ss']='5s'
q['ss']='s'

функция print_js даёт:
CODE:
[0,1,2,[50,51,'5s'],'s']
,что неверно
а функция arrayToString:
CODE:
a=new Array();a["0"]=0;a["1"]=1;a["2"]=2;a["5"]=new Array();a["5"]["0"]=50;a["5"]["1"]=51;a["5"]["ss"]="5s";a["ss"]="s";

Cоздаваемая функция будет сохранять этот массив в строку
CODE:
[0,1,2,/2/,[50,51,ss='5s'],ss='s']
, которая корректно превращается в массив посредством eval. Но к сожалению не дает правильный массив. Далее следует выловить из полученого массива значения, которые не соответствуют значениям строкии (и заменить их на 'undefined') и есле они являются строкой (ss='s') - создать соответствующие элементы массива, а если обьектом (/2/) (кто-нибудь знает, что это за обьет такой) - вставить н-ное кол-во неопределенных элементов. Если не сочтёте это за бред сивой кобылы, то я приступаю. :)
13. Дмитрий Б. - 24 Октября, 2005 - 01:20:53 - перейти к сообщению
Приступай... Флаг тебе в руки!
14. kr12 - 29 Октября, 2005 - 11:20:47 - перейти к сообщению
Готово. (удалено, т.к. содержало ошибки)
15. kr12 - 14 Декабря, 2005 - 14:22:54 - перейти к сообщению
при попытке практического применения функции обнаружилось, что for( in ) проходит массив не в правильном порядке, а в порядке создания. Т.е. если создавать массив скажем так:
CODE:

b=[]
b[2]='a2'
b[1]=new Array()
b[1]['ss']='d'
b[0]='aa'

то функция выдаст ['a2',[ss='d'],'aa'], что не верно.
Есть ли простой (или сложный :( ) способ "выровнять" созданный массив перед преобразованием?
16. Леголегс - 14 Декабря, 2005 - 15:25:15 - перейти к сообщению
kr12 пишет:
Есть ли простой (или сложный Недовольство, огорчение ) способ "выровнять" созданный массив перед преобразованием?
А зачем? Пусть уж лучше функция восстанавливает исходный объект в точности.
17. kr12 - 15 Декабря, 2005 - 01:50:43 - перейти к сообщению
Оно может для чего то и лучше, но нам ведь надо потом в точности восстановить исходный массив из полученой строки. Под сложным способом я имею в виду исспользование функции arrayToString, приведенной выше Дмитрием Б. с последующей сортировкой и, возможно, предварительным превращением в правильный массив полученной строки типа
CODE:
["5"]=new Array();a["5"]["0"]=50;a["5"]["1"]=51;a["5"]["ss"]="5s";a["ss"]="s";
18. Дмитрий Б. - 15 Декабря, 2005 - 02:11:42 - перейти к сообщению
Блин, да самый простой способ - это не париться и писать массив в текстовый файл в виде скрипта (a=new Array() и понеслась), а потом возраждать eval'ом (или ещё проще - document.getElementById('myscript'Подмигивание.src=...).
19. kr12 - 15 Декабря, 2005 - 02:38:58 - перейти к сообщению
Но мы ведь не ищщем простых способов :(
20. kr12 - 15 Декабря, 2005 - 13:58:56 - перейти к сообщению
Последний шаг оказался прощще, чем я думал:
CODE:

a=arrayToLString('a',a)
a=a.split(';').sort().join(';').substr(1);
eval(a)

упорядочивает внутреннюю структуру массива.
Были исправлены еще мелкие ошибки. Теперь точно работает.
ИТОГО:

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0308]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33