Без описания |
Поиск в теме | Версия для печати |
Леголегс |
Отправлено: 09 Января, 2006 - 16:15:45
|
JS-маньяк
Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004
Откуда: Липецк
Карма 17
|
kr12
Поднимем тему Мне тут вдруг понадобилось кое-чево сериализовать. Скачал этот скрипт но почему-то под Windows Script Host он не заработал. Да и не очень хотелось Своё всегда интереснее писать. Написал. Весьма небольшая в вместе с тем универсальная функция. Привожу вместе с примером CODE:function serialize(value)
{
var NL = "\r\n", TAB = "\t", out = new Array(), facttype;
if (value instanceof Array) facttype = "array";
else if (value instanceof RegExp) facttype = "regexp";
else if (value instanceof Function) facttype = "function";
else if (value instanceof Object) facttype = "object";
else facttype = typeof(value);
switch(facttype)
{
case "object":
for (var i in value)
out.push(serialize(i) + ": " + serialize(value[i]));
return "{"+(NL+out.join(","+NL)).replace(/\n/g,"\n"+TAB)+NL+"}";
case "array":
for (var i=0;i<value.length;i++)
out.push(serialize(value[i]));
return "["+(NL+out.join(","+NL)).replace(/\n/g,"\n"+TAB)+NL+"]";
case "string":
var r1 = [/\t/g, /\r/g, /\n/g, /"/g, /\\/g ];
var r2 = ["\\t", "\\r", "\\n", "\\\"","\\\\"];
while (r1.length) value = value.replace(r1.pop(),r2.pop());
return '"' + value +'"';
default:
return value.toString().replace(/\n/g,"\n"+TAB);
}
}
var test = {
adin: false,
dva: [3,2,1,6,7],
tri: {imya: "vasia", familiya: "pupkin"},
chetire: /(.+)/,
piat: function (d) { return d/2; },
bIbIbI: "\\djt \"yj\" yjy \
gh\n_ drt j\n\
"
};
eval("var clon="+serialize(test));
WScript.echo("test = " + serialize(test) + ";\n\
//===========================\n\
clon = " + serialize(clon) + ";"); |
|
|
Павел |
Отправлено: 10 Января, 2006 - 02:39:59
|
Junior Member
Покинул форум
Сообщений всего: 71
Дата рег-ции: Июль 2005
Откуда: Санкт-Петербург
Карма 0
|
CODE:function object2string(obj) {
var val, output = "";
if (obj) {
output += "{";
for (var i in obj) {
val = obj[i];
switch (typeof val) {
case ("object"):
if (val[0]) {
output += i + ":" + array2string(val) + ",";
} else {
output += i + ":" + object2string(val) + ",";
}
break;
case ("string"):
output += i + ":'" + escape(val) + "',";
break;
default:
output += i + ":" + val + ",";
}
}
output = output.substring(0, output.length-1) + "}";
}
return output;
}
function array2string(array) {
var output = "";
if (array) {
output += "[";
for (var i in array) {
val = array[i];
switch (typeof val) {
case ("object"):
if (val[0]) {
output += array2string(val) + ",";
} else {
output += object2string(val) + ",";
}
break;
case ("string"):
output += ":'" + escape(val) + "',";
break;
default:
output += val + ",";
}
}
output = output.substring(0, output.length-1) + "]";
}
return output
}
function string2array(string) {
eval("var result = " + string);
return result;
}
function string2object(string) {
eval("var result = " + string);
return result;
}
Вот так изящно... Особенно мне нравится из строки в массив/объект, где на самом деле можно одну функцию сделать |
|
|
|
Поиск в теме | Версия для печати |
Страниц (5): « 1 2 [3] 4 5 » |
Сейчас эту тему просматривают: 9 (гостей: 9, зарегистрированных: 0, скрытых: 0) |
« JavaScript » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|