Преобразование многомерного массива в строку и обратно
Здравствуйте.
Возникла задача записи многомерных массивов в куки. Для этого нужно преобразовывать массив в строку и наоборот. Написал для этого мини-функции, прошу оценить и подсказать адекватен ли этот код:
//----Преобразование массива в строку --------------
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, время: 05:37. |