Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2014, 01:58
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

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


Буду признателен за адекватные ответы
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2014, 02:11
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

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

Последний раз редактировалось dmitriymar, 30.03.2014 в 02:21.
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2014, 02:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

если массивы содержат только массивы ...
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])
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2014, 02:31
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

dmitriymar,
Спасибо за ответ. Json ничего не говорит - я только первые шаги делаю в JS - только jQuery юзаю - и то не все его возможности.
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2014, 02:38
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

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

Последний раз редактировалось Bond, 30.03.2014 в 02:44.
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2015, 13:16
Кандидат Javascript-наук
Отправить личное сообщение для 12345678 Посмотреть профиль Найти все сообщения от 12345678
 
Регистрация: 03.09.2012
Сообщений: 109

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));
	}
}

Последний раз редактировалось 12345678, 08.04.2015 в 13:52.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из массива в строку Smoke332 Javascript под браузер 4 06.08.2019 08:57
Преобразование объекта в URL строку Hapson Общие вопросы Javascript 5 23.03.2014 11:44
Создание многомерного массива из PHP ivandelov Общие вопросы Javascript 6 13.06.2012 21:01
конвертация сложного массива в строку и назад Leax Общие вопросы Javascript 2 01.04.2010 18:17
объединение элементом массива в одну строку vvsh Элементы интерфейса 2 17.10.2009 19:53