|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
типа тоже вариант
private function convertToString(obj:Object, parents:String="", level:int = 0 ):void { var key:String; var keys:Array = []; var values:Array = []; for ( key in obj ) { keys.push(key); values.push(obj[key]); } var indxes:Array = keys.sort(Array.RETURNINDEXEDARRAY); for (var i:int = 0; i < indxes.length; i++) { var j:int = indxes[i]; var subObj:*= values[j]; key = keys[j]; if (subObj is String) { var pfx:String = i ? "" : parents; res += pfx + key + "=" + subObj + "\n"; }else { var del:String = level == 1 ?"=" : ""; convertToString(obj[key], parents + del+key, level + 1); } } } по правилам-то спокойнее, глядишь и извращаться не придется |
|
|||||
Цитата:
Как-то так. Проще по кейсам из тестов понять. Я сам это из автора по слову выгрызал Добавлено через 4 минуты Самое интересное в
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
function linear(obj:Object, level:int = 0, header:String = "", withTree:Boolean = false):String{ var stack:Array = []; stack.push( { value: obj, key: header, level: level } ); var result:String = ""; var currentOwner:Object; while(stack.length){ var current:Object = stack.pop(); if (current.level !== 1) { if(current.level === 2){ if (withTree) { result += "\n" + new Array(currentOwner.level).join("\t"); } result += currentOwner.key + "="; } if(withTree){ if (result.length) result += "\n"; result += new Array(current.level).join("\t"); } result += current.key; } else currentOwner = current; if(!(value is String)){ var keys:Vector.<String> = new Vector.<String>(); var key:String; for (key in current.value) { keys.push(key); } keys.sort(Array.DESCENDING); for(var i:uint = 0; i < keys.length; i++){ key = keys[i]; stack.push({value: current.value[key], key: key, level: current.level + 1}); } }else result += "=" + current.value; } return result; } function recursive(value:Object, level:int = 0, key:String = "", withTree:Boolean = false):String{ var result:String = ""; if(level !== 1){ if (withTree) { if (level > 1) result += "\n"; result += new Array(level).join("\t"); } result += key; } if(!(value is String)){ var keys:Vector.<String> = new Vector.<String>(); var _key:String; for (_key in value) { keys.push(_key); } keys.sort(0); for(var i:uint = 0; i < keys.length; i++){ _key = keys[i]; if(level === 1){ if(withTree){ result += "\n" + new Array(level).join("\t"); } result += key + "="; } result += recursive(value[_key], level + 1, _key, withTree); } return result; }else return result + "=" + value; } private function recursive(value:Object, level:int = 0, key:String = ""):String{ var result:String = ""; if(level !== 1){ result += key; } if(!(value is String)){ var keys:Vector.<String> = new Vector.<String>(); var _key:String; for (_key in value) { keys.push(_key); } keys.sort(0); for(var i:uint = 0; i < keys.length; i++){ _key = keys[i]; if(level === 1){ result += key + "="; } result += recursive(value[_key], level + 1, _key); } return result; }else return result + "=" + value; } |
|
|||||
Почти
Вот так должно быть
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
Dukobpa3, ааа, я правило проглядел, пичаль что уже сплю
|
|
|||||
GrafMine, может быть Ваш велосипед не совсем актуальный?
__________________
return this... |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
|
|
|||||
Я посмел предположить, что Вы хотите создать универсальный "отладочный" метод, дабы мониторить все вложености свойств объекта
__________________
return this... |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
function linear(obj:Object, level:int = 0,withTree:Boolean = false):String{ var stack:Array = []; stack.push( { value: obj, key: "", level: level } ); var result:String = ""; var turn:Array = []; while(stack.length){ var current:Object = stack.pop(); turn.push(current); if(!(current.value is String)){ var keys:Vector.<String> = new Vector.<String>(); var key:String; for (key in current.value) { keys.push(key); } keys.sort(Array.DESCENDING); for(var i:uint = 0; i < keys.length; i++){ key = keys[i]; stack.push({value: current.value[key], key: key, level: current.level + 1, parent: current}); } }else { if(current.level > 2){ current.parent.parent.isOwner = true; } current.isPrimitive = true; } } var prevIsPrimitive:Boolean = false; var prevPrimitive:Object = null; for (var j:uint = 0; j < turn.length; j++ ) { current = turn[j]; if (current.level > 1 && current.parent.isOwner && !current.isPrimitive) { if (withTree) { result += "\n" + new Array(current.parent.level).join("\t"); } result += current.parent.key + "="; } else if (current.isPrimitive) { if (prevPrimitive && prevPrimitive.parent !== current.parent || !prevIsPrimitive) { if (withTree) { result += "\n" + new Array(current.parent.level).join("\t"); } result += current.parent.key; prevIsPrimitive = true; prevPrimitive = current; } if (withTree) { result += "\n" + new Array(current.level).join("\t"); } result += current.key + "=" + current.value; }else { prevIsPrimitive = false; } } return result; } Dukobpa3, а если у вас: у меня: |
Часовой пояс GMT +4, время: 15:01. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|