JavaScript实现dump输出

        方法源码放在最后,懒得看文的直接去最后复制。


        说点废话,刚从lua开发换到js,对于很多的自带方法还不适应,就比如lua非常实用的dump方法,js中居然没有相关的方法,唉,忍了好几天,实在不方便。

        比如我代码里有用到一个变量,变量的数据不知道,不过本文为了方便测试,写了个测试数据,内容如下:

var testData = {
    lannan91:{
        Name:"lannan91",
        Age:91,
        Id:123456789,
        Tel:110120119,
    },
    nannal:{
        Name:"nannal",
        Age:19,
        Id:987654321,
        Tel:911021011,
    },
    "Guo'degang":{
        Name:"Guo'degang",
        Birth:19730118,
        Apprentice:{
            "Yue'yunpeng":{
                Name:"Yue'yunpeng",
                Birth:19850415,
                Apprentice:{
                    Name:"Shang'xiaoju",
                    Birth:19950829,
                    Home:"henan",
                },
                Height:175,
                Home:"henan",
            },
            "Tao'yang":{
                Name:"Tao'yang",
                Birth:19970927,
                Home:"jiangxi",
            }
        },
        Height:168,
        Home:"tianjin",
    }
}

        在不知道数据内容,只能看到一个变量的时候,如果想看的话,只有两种方法,一是打断点,但是webstorm的断点功能真是的垃圾。另一种方式就是用这行代码输出json字符串:

console.log("~~~~~~~~~ data = " + JSON.stringify(data))

        可是打印出的结果是这个样子的:

        我不相信一个正常人可以直接看出这是个什么玩意儿,还得复制之后再去用一个json格式化工具才能看结构,麻烦死了。每当这一通繁琐的操作下来之后,我都会忍不住怀念lua,直接dump(data, "~~~~~~~~~ data")不就行了,气不过,强大的效率机器怎么能容忍被这种操作拖住,自己写一个dump输出方法吧。

        头一次需要自己写这种玩意儿,被缩进量和括号的前后对应给搞的头都大了,不过这么点小困难是绝不会让我退缩的,最后用自己写的方法输出结果如下图,终于达到满意:




        基本完美还原lua用的dump方法,源码如下:

var dump = function(dumpData, dumpKey) {
    var logData = dumpKey + " = ";
    var loopIdx = 1;
    var getResultStr = function(data){
        logData = logData + "{\n";
        var curIdx = 0;
        for (key in data) {
            curIdx++;
            for (var i = 0; i < loopIdx; ++i)
                logData = logData + "\t";

            if (typeof key == "number") {
                logData = logData + "[" + key + "] = ";
            } else {
                logData = logData  + key + " = ";
            }

            if (typeof data[key] == "object") {
                loopIdx++;
                getResultStr(data[key]);
            } else {
                logData = logData + data[key];
            }
            logData = logData + "\n"
            if (curIdx == Object.keys(data).length)
                loopIdx--;
        }
        for (var i = 0; i < loopIdx; ++i)
            logData = logData + "\t";
        logData = logData + "},"
    }

    if (typeof(dumpData) == "object"){
        getResultStr(dumpData);
    } else {
        logData = logData + dumpData;
    }

    console.log(logData);
}

dump(testData, "~~~~~~~~~ data")

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值