Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразование многомерного массива в строку и обратно (https://javascript.ru/forum/misc/46136-preobrazovanie-mnogomernogo-massiva-v-stroku-i-obratno.html)

Bond 30.03.2014 01:58

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


Буду признателен за адекватные ответы

dmitriymar 30.03.2014 02:11

Конечно бред. Json что нибудь говорит? Да и массивы могут быть не только одиночной вложенности и содержать не только простые типы. Обьекты как элементы массива....

рони 30.03.2014 02:29

: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])

Bond 30.03.2014 02:31

dmitriymar,
Спасибо за ответ. Json ничего не говорит - я только первые шаги делаю в JS - только jQuery юзаю - и то не все его возможности.

Bond 30.03.2014 02:38

рони,
Спасибо, интересно.
Да, будут только массивы причем все одинаковые с данными ID->название->цена, ID->название->цена, ID->название->цена и т.д.
Причем будет задача удалять некоторые массывы "ID->название->цена" и подсчитывать их количество
Собственно поэтому были выбраны многомерные массивы
а с jSON обязательно ознакомлюсь

12345678 08.04.2015 13:16

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, время: 00:37.