用递归打印k型图案_分享自己写的一个js的信息打印程序

1、测试代码,保存为【test.html】

    Document

效果如下:

b96d005be154bb33e9e52f4d5ce647a8.png

2、源码(保存为 write.js)

//生成打印对象的字符串,方便 document.write//或者 innerText 和 innerHTML 调用function getWriteHtml() {    var args = Array.from(arguments);           //将参数转换成数组    var strRet = "";    var isfirst = true;                         //第一个不需要打印逗号    for(var arg of args) {        if (!isfirst) { strRet += (","); }  //不是第一个元素全都要打印逗号        if (arg instanceof Array) {             //如果是数组            strRet += '['+getWriteHtml(...arg)+']';                      //将 [arg] 转换成  (1,2,3) 的形式,再一次write(递归)        } else if (arg instanceof Object) {     //如果是对象 { k:v, k:v } 这种形式            strRet += "{";                         //打印 {            var isfirst2 = true;                //第一个不需要打印逗号            for(var k in arg) {                 //循环取 k                if (!isfirst2) { strRet += (","); }                 strRet += k + ":" + getWriteHtml(arg[k]);          //打印 k:v => 其中 v 不知道是啥,所以递归调用打印方法                isfirst2 = false;               //表示后面的都不需要打印逗号了            }            strRet += "}";                         //打印 }        } else strRet += (arg);             //即不是数组,也不是对象,直接打印就是了        isfirst = false;    }    return strRet;}function getWriteHtmlPretty() {    var info = {        level: 0, newLine: true,        valColor: '#666',                           //值颜色        bracketColor: '#a00',                       //括号颜色        objKeyColor: '#0a0'                         //键值对里的键颜色    };    function _getWriteHtmlPretty() {        var args = Array.from(arguments);           //将参数转换成数组        var strRet = "";        var info = args[0];        var clevel = info.level;        var spaces = ''.padEnd(clevel, '');       //根据级别来计算缩进        var spaces2 = ''.padEnd(clevel + 1, '');  //根据级别来计算缩进        var isfirst = true;                         //第一个不需要打印逗号        for(var c=1; c[${_getWriteHtmlPretty(...[info, ...arg])}]`;                      //将 [arg] 转换成  (1,2,3) 的形式,再一次write(递归)            } else if (arg instanceof Object) {     //如果是对象 { k:v, k:v } 这种形式                info.level++;                if (info.newLine) { strRet += "" + spaces; }                strRet += `{`;                         //打印 {                var isfirst2 = true;                //第一个不需要打印逗号                for(var k in arg) {                 //循环取 k                    if (!isfirst2) { strRet += ","; }                       if (arg[k] instanceof Object) info.newLine = false;                    strRet += `${spaces2}${k}:`                             + `${ _getWriteHtmlPretty(...[info, arg[k]])}`;          //打印 k:v => 其中 v 不知道是啥,所以递归调用打印方法                    info.newLine = true;                    isfirst2 = false;               //表示后面的都不需要打印逗号了                }                strRet += `${spaces}}`;                         //打印 }                info.level--;            } else strRet += `${arg}`;             //即不是数组,也不是对象,直接打印就是了            isfirst = false;        }        return strRet;    }    var args = [info, ...Array.from(arguments)];           //将参数转换成数组    return _getWriteHtmlPretty(...args);}function write() {    var html = getWriteHtml(...Array.from(arguments));    document.write(html);}//打印完加个 
标签,html里的换行function writebr() { var args = Array.from(arguments); write(...args); write("
");}//打印完加个换行符,普通format的换行function writeln() { var args = Array.from(arguments); write(...args); write("");}//格式化打印 writeformat(()=>{ 这里头调打印函数 });function writeformat(func) { write("
");    func();    write("");}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值