Итого:
функция 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/) (кто-нибудь знает, что это за обьет такой) - вставить н-ное кол-во неопределенных элементов. Если не сочтёте это за бред сивой кобылы, то я приступаю. :)
|