发新话题
打印

[分享] 打印出多重相互嵌套的数组或对象(toString)

打印出多重相互嵌套的数组或对象(toString)

在很多情况下,在调试代码的时候都需要对一个很复杂的数组或者对象进行分析,这样就需要trace出字符串,方便我们进行查错.
以下的类适用于
数字型或者字符串型的数组或对象相互嵌套
复制内容到剪贴板
代码:
/*
* TraceObject CLASS
*
* @ CREATED BY: ycccc8202
* @ PURPOSE: 打印对象字符串
* @ DATE:2007.6.22
* Usage example:
* import com.ycccc.utils.TraceObject;
* var a = [[1, 2, 3], {i:1, j:2}, [{m:3, n:"4"}, 5], "6", {j:["7", 8], k:{p:9, q:"10"}}];
* var b = {i:8, j:{o:1, p:2}, k:[3, 4], l:{r:"4", s:["5", 6]}, m:"7"};
* var c = [1, 2, 3];
* var d = {i:1, j:2, k:3};
* trace(TraceObject.toString(a));
* trace(TraceObject.toString(b));
* trace(TraceObject.toString(c));
* trace(TraceObject.toString(d));
*/
class com.ycccc.utils.TraceObject {
/**
* Private Static members
*/
private static var RESULT_STRING = "";
/**
* Public Static methods
*/
public static function toString(obj:Object) {
  RESULT_STRING = ObjToString(obj).substr(0, -1);
  return RESULT_STRING;
}
/**
* Private Static methods
*/
private static function ObjToString(obj:Object):String {
  var resultStr:String = "";
  var type:Object = typeof obj;
  switch (type) {
  case "number" :
   return obj+",";
  case "string" :
   return "\""+obj+"\",";
  case "object" :
   if (obj.length<>undefined) {
    resultStr += "[";
    for (var _i:Number = 0; _i<obj.length; _i++) {
     resultStr += ObjToString(obj[_i]);
    }
    resultStr = resultStr.substr(0, -1);
    resultStr += "],";
   } else {
    resultStr += "{";
    for (var _i in obj) {
     resultStr += _i+":"+ObjToString(obj[_i]);
    }
    resultStr = resultStr.substr(0, -1);
    resultStr += "},";
   }
   return resultStr;
  }
}
}
//用法:
import com.ycccc.utils.TraceObject;
var a = [[1, 2, 3], {i:1, j:2}, [{m:3, n:"4"}, 5], "6", {j:["7", 8], k:{p:9, q:"10"}}];
var b = {i:8, j:{o:1, p:2}, k:[3, 4], l:{r:"4", s:["5", 6]}, m:"7"};
var c = [1, 2, 3];
var d = {i:1, j:2, k:3};
trace(TraceObject.toString(a));
trace(TraceObject.toString(b));
trace(TraceObject.toString(c));
trace(TraceObject.toString(d));

//p.s:希望对大家有些帮助 v(-_-)v

[ 本帖最后由 ycccc8202 于 2007-6-22 13:11 编辑 ]
寻觅终生伴侣!

my blog

TOP

感觉这个东西没多大用处,因为打印object的时候只是打印一级属性,这些比较简单也不需要去用类,直接写就很快,应该完善下,把object的各级属性打印出来,最好能打印成树形就perfect了

TOP

还是一样 维数不能超过递归极限 yc用while方法是不是更安全 你当初这么教育我的欧
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

恩,一般情况下,应该也差不多够用
寻觅终生伴侣!

my blog

TOP

呵呵 忘记我上次用namespace那回了....
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

既然是这样,我就不用递归,这下没有递归256限制,就看个人电脑了
修改如下:
//用for来代替递归
复制内容到剪贴板
代码:
/*
* TraceObject CLASS
*
* @ CREATED BY: ycccc8202
* @ PURPOSE: 打印对象字符串
* @ DATE:2007.6.25
* Usage example:
* import com.ycccc.utils.TraceObject;
* var a = [[1, 2, 3], {i:1, j:2}, [{m:3, n:"4"}, 5], "6", {j:["7", 8], k:{p:9, q:"10"}}];
* var b = {i:8, j:{o:1, p:2}, k:[3, 4], l:{r:"4", s:["5", 6]}, m:"7"};
* var c = [1, 2, 3];
* var d = {i:1, j:2, k:3};
* trace(TraceObject.toString(a));
* trace(TraceObject.toString(b));
* trace(TraceObject.toString(c));
* trace(TraceObject.toString(d));
*/
class com.ycccc.utils.TraceObject {
/**
* Private Static members
*/
private static var RESULT_STRING = "";
private static var OBJECT:Object;
/**
* Public Static methods
*/
public static function toString(obj:Object) {
  OBJECT = obj;
  RESULT_STRING = ObjToString(OBJECT).substr(0, -1)+((OBJECT.length == undefined) ? "" : "]");
  return RESULT_STRING;
}
/**
* Private Static methods
*/
private static function ObjToString(obj:Object):String {
  var resultStr:String = obj.length == undefined ? "" : "[";
  var tempList = [];
  tempList = tempList.concat(obj);
  for (var i = 0; i<tempList.length; i++) {
   var type:String = typeof tempList[i];
   switch (type) {
   case "number" :
    resultStr += tempList[i]+",";
    tempList.shift();
    i--;
    continue;
   case "string" :
    var op:String = tempList[i];
    if (op == "_yc_]," || op == "_yc_},") {
     resultStr = resultStr.substr(0, -1);
     resultStr += op.substr(4);
    } else if (op.substr(0, 5) == "__yc_") {
     resultStr += op.substr(5);
    } else {
     resultStr += "\""+op+"\",";
    }
    tempList.shift();
    i--;
    continue;
   case "object" :
    if (tempList[i].length<>undefined) {
     //[]
     resultStr += "[";
     var temp:Array = tempList[i];
     tempList.shift();
     tempList.unshift("_yc_],");
     tempList = temp.concat(tempList);
     i--;
    } else {
     //{}
     resultStr += "{";
     var temp:Array = [];
     for (var _i in tempList[i]) {
      temp.push("__yc_"+_i+":");
      temp.push(tempList[i][_i]);
     }
     tempList.shift();
     tempList.unshift("_yc_},");
     tempList = temp.concat(tempList);
     i--;
    }
   }
  }
  return resultStr;
}
}
寻觅终生伴侣!

my blog

TOP

打包收了  哈哈哈
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

ycccc8202 斑竹问下问题:
北京哪里有比较便宜比较好的FLASH培训地方啊,我暑假要到我哥哥那里去,因第一次去不太熟悉,希望斑竹大哥说下,谢谢...

TOP

一些学校门口的软件学习班应该都有相关的课程吧
寻觅终生伴侣!

my blog

TOP

TOP

发新话题