Преобразование многомерного массива в строку и обратно
Здравствуйте.
Возникла задача записи многомерных массивов в куки. Для этого нужно преобразовывать массив в строку и наоборот. Написал для этого мини-функции, прошу оценить и подсказать адекватен ли этот код: //----Преобразование массива в строку -------------- function arr_to_str(arr){ var b = arr[0].join('='); for(var i = 1; i < arr.length; i++){ b += '-' + a[i].join('='); } return b; } //------И сразу же можно проверить работу функции --------- var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; alert(arr_to_str(a)); //----Преобразование строки в массив----------------- function str_to_arr(str){ var str1 = str.split('-'); var c = new Array(); for(var i = 0; i < str1.length; i++){ c[i] = str1[i].split('='); } return c; } //------И сразу же можно проверить работу функции --------- var g = "1=2=3-4=5=6-7=8=9"; alert(str_to_arr(g)); Буду признателен за адекватные ответы |
Конечно бред. Json что нибудь говорит? Да и массивы могут быть не только одиночной вложенности и содержать не только простые типы. Обьекты как элементы массива....
|
:write: если массивы содержат только массивы ...
function arr_to_str(arr){ for(var i = 0; i < arr.length; i++){ if (arr[i].constructor === Array) {arr[i] = arr_to_str(a[i])}; } return "["+arr.join(",")+"]"; } var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; a = arr_to_str(a); alert(a); function str_to_arr(str){ return eval("(" + str + ")")}; a = str_to_arr(a) alert(a); alert(a[1]) |
dmitriymar,
Спасибо за ответ. Json ничего не говорит - я только первые шаги делаю в JS - только jQuery юзаю - и то не все его возможности. |
рони,
Спасибо, интересно. Да, будут только массивы причем все одинаковые с данными ID->название->цена, ID->название->цена, ID->название->цена и т.д. Причем будет задача удалять некоторые массывы "ID->название->цена" и подсчитывать их количество Собственно поэтому были выбраны многомерные массивы а с jSON обязательно ознакомлюсь |
Bond, спасибо. Немного переписал код и получилась универсальная функция.
var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; //Преобразуем массив в строку и обратно var ret = ArrayParser(a) alert(ret); ret = ArrayParser(ret) //массив разделён, чтобы было видно, что это массив alert(ret[0]+ret[1]+ret[2]);//12,15,18 function ArrayParser(data){ var x =","; var y =";\n"; var str; var arr; if (typeof data === "string"){ str = decodeURIComponent(data); str = str.split(y); var arr = new Array(); for(var i = 0; i < str.length; i++){ arr[i] = str[i].split(x); } return arr; }else{ str = data[0].join(x); for(var i = 1; i < data.length; i++){ str += y + data[i].join(x); } return (encodeURIComponent(str)); } } |
Часовой пояс GMT +3, время: 16:20. |