11. Дмитрий Б. - 20 Октября, 2005 - 02:07:47 - перейти к сообщению
Забыл уточнить: первый параметр - строка с названием переменной, второй - сама переменная...
12. kr12 - 22 Октября, 2005 - 14:02:53 - перейти к сообщению
Итого:
функция print_js создает компактную и удобную для понимания (визуального) строку, но не учитывает пропущенных элементов и ассоциативных элементов.
функция arrayToString правильно преобразует массив, но сильно увеличивается размер строки (для плотно заполненных массивов) и ухутшается читабельность.
Думаю наоснове комбинации этих функций создать некую функцию, которая сочиталабы их положительные качества, но не имела бы их недостатков.
Например для массива
функция print_js даёт:
а функция arrayToString:
Cоздаваемая функция будет сохранять этот массив в строку
функция print_js создает компактную и удобную для понимания (визуального) строку, но не учитывает пропущенных элементов и ассоциативных элементов.
функция arrayToString правильно преобразует массив, но сильно увеличивается размер строки (для плотно заполненных массивов) и ухутшается читабельность.
Думаю наоснове комбинации этих функций создать некую функцию, которая сочиталабы их положительные качества, но не имела бы их недостатков.
Например для массива
CODE:
q=[0,1,2];q[5]=new Array();
q[5]=[50,51]
q[5]['ss']='5s'
q['ss']='s'
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:
, которая корректно превращается в массив посредством eval. Но к сожалению не дает правильный массив. Далее следует выловить из полученого массива значения, которые не соответствуют значениям строкии (и заменить их на 'undefined') и есле они являются строкой (ss='s') - создать соответствующие элементы массива, а если обьектом (/2/) (кто-нибудь знает, что это за обьет такой) - вставить н-ное кол-во неопределенных элементов. Если не сочтёте это за бред сивой кобылы, то я приступаю. :) [0,1,2,/2/,[50,51,ss='5s'],ss='s']
13. Дмитрий Б. - 24 Октября, 2005 - 01:20:53 - перейти к сообщению
Приступай... Флаг тебе в руки!
14. kr12 - 29 Октября, 2005 - 11:20:47 - перейти к сообщению
Готово. (удалено, т.к. содержало ошибки)
15. kr12 - 14 Декабря, 2005 - 14:22:54 - перейти к сообщению
при попытке практического применения функции обнаружилось, что for( in ) проходит массив не в правильном порядке, а в порядке создания. Т.е. если создавать массив скажем так:
то функция выдаст ['a2',[ss='d'],'aa'], что не верно.
Есть ли простой (или сложный :( ) способ "выровнять" созданный массив перед преобразованием?
CODE:
b=[]
b[2]='a2'
b[1]=new Array()
b[1]['ss']='d'
b[0]='aa'
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)
a=arrayToLString('a',a)
a=a.split(';').sort().join(';').substr(1);
eval(a)
упорядочивает внутреннюю структуру массива.
Были исправлены еще мелкие ошибки. Теперь точно работает.
ИТОГО: