extend,formatJson,typeOf

Run Settings
LanguageJavaScript
Language Version
Run Command
/** * 深拷贝、合并对象 测试 */ var utils = require("./dio.js") var UtilJson = require("./tria.js"); var test = require("./tessera.js"); var opt = require("./pente.js"); //测试 // differrent type // var des = 1; // var src = 2; // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // var des = 1; // var src = "2"; // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // var des = 1; // var src = [2]; // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // function function first will be replaced by the second // var des = function a(){}; // var src = function b(){}; // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // function and object // var des = function a(){}; // var src = { // code:6, // versin:"1.1.0", // getVersion:function(){ // return this.version; // } // } // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // utils.printFnInfo(ret); // two array // var des = [1,"cn.pheker"]; // var src = ["2","hello",123]; // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // two object //TODOS some bugs named Maximum call stack size exceeded // var des = { // a:1, // b:"b", // children:{ // des_alias:'des_alias', // name:"des" // } // } // var src = { // b:"bb", // c:true, // children:{ // src_alias:'src_alias', // name:"src", // other:"other" // }, // data:[1,2,3] // } // var ret = utils.extend(des,src); // utils.clog(ret,des,src); // var formatedJson = UtilJson.formatJson(JSON.stringify(ret)) // console.log(formatedJson); // var $config = utils.extend(test._config,test.config); // utils.clog($config,test.config,test._config); // var formatedJson = UtilJson.formatJson(JSON.stringify($config)) // console.log(formatedJson); var $opt = utils.extend(opt._options,opt.options,{id:"pheker1111111"}); utils.clog($opt); var formatedJson = UtilJson.formatJson(JSON.stringify($opt)) console.log(formatedJson);
/** * 深拷贝、合并对象 实现 */ function clog(){ var args_num = arguments.length; var s = ""; for (var i = 0; i < args_num; i++) { var v = arguments[i]; var type = typeOf(v); if(type.isFunction()){ s += "["+i+"]: "+v.getName()+"\t"+typeOf(v).name+"\n"+v+"\n"; }else{ s += "["+i+"]: "+JSON.stringify(v)+"\t"+typeOf(v).name+"\n"; } } console.log(s); } function cdir(value){ var args_num = arguments.length; var s = ""; for (var i = 0; i < args_num; i++) { console.dir(arguments[i]); } } Function.prototype.getName = function(){ return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]||'anonymous'; } // print info of function eg: getInfo(fn0,fn1,...fnn) function printFnInfo(){ var argLen = arguments.length; for(var i=0;i<argLen;i++){ console.log("\n-----------------------------\n") var fn = arguments[i]; console.log("name:\t"+fn.getName()); for(var p in fn){ console.log("property:"+p+"="+fn[p]+",\tprototype:"+JSON.stringify(fn.prototype));//bug:无法显示 原型中的函数 } } } /** * 判断类型 */ function typeOf(o){ var type = Object.prototype.toString.call(o); var name = type.substring(1,type.length-1).split(" ")[1].toLowerCase(); return { type:type, name:name, isNull:function(){ return this.name==="null"; }, isUndefined:function(){ return this.name==="undefined"; }, isNumber:function(){ return this.name==="number"; }, isBoolean:function(){ return this.name==="boolean"; }, isString:function(){ return this.name==="string"; }, isObject:function(){ return this.name==="object"; }, isArray:function(){ return this.name==="array"; }, isFunction:function(){ return this.name==="function"; } }; } /** * 拷贝 */ function copy(src){ var ret; if(typeOf(src).isArray()){ //数组 ret = src.slice(0); }else if(typeOf(src).isObject()){ //对象 ret = {}; for(var p in src){ ret[p] = src[p]; } }else{ //其它 ret = src; } return ret; } /** * 合并 */ function merge(des,src){ var ret = copy(des); if(typeOf(des).isArray()&&typeOf(src).isArray()){ // array array //数组合并 var maxLen = des.length>=src.length?des.length:src.length; var containObjOrArr = false; for (var j = 0; j < maxLen; j++) { if (des[j] && (typeOf(des[j]).isObject() || typeOf(des[j]).isArray()) || src[j] && (typeOf(src[j]).isObject() || typeOf(src[j]).isArray())) { containObjOrArr = true; } } if (containObjOrArr) {//数组合并 for (var i = 0; i < maxLen; i++) { ret[i] = merge(des[i], src[i]); } } else {//数组替换 ret = src; } }else if(typeOf(des).isObject()&&typeOf(src).isObject()){ // object object for(var p in src){ ret[p] = merge(des[p],src[p]); } }else if(typeOf(des).isFunction()&&typeOf(src).isObject()){ // function and object for(var attr in src){ ret[attr] = merge(des[attr],src[attr]); } }else{ // other type or different type if(!src){ console.log("------empty-------") ret = src; } } return ret; } /** * 将多个参数合并到第一个参数上码数参数上并返回,且所有参数不变 */ function extend(){ var argsLen = arguments.length; var ret = arguments[0]; if(arguments.length<2) return; for(var i=1;i<argsLen;i++){ ret = merge(ret,arguments[i]); } return ret; } var utils = { clog:clog, cdir:cdir, printFnInfo:printFnInfo, extend:extend } module.exports = utils;
/** * 格式化json, * TODOS: * 1.ovx数组格式化异常 * 2.不支持转义字符 */ function formatJson(json){ var len = json.length; //深度,缩进量 var deep = 0; //返回值数组 var ret = []; //平衡组 balanceGroup var bg = { isBalance:[], balanceChar:[], push:function(isBalance,balanceChar){ this.isBalance.push(isBalance); this.balanceChar.push(balanceChar); }, pop:function(isBalance,balanceChar){ this.isBalance.pop(isBalance); this.balanceChar.pop(balanceChar); }, getLen:function(){ return this.isBalance.lenght; }, prev:function(){ var len = this.getLen return len<2?[]:[this.isBalance[len-1],this.balanceChar[len-1]]; } } var inArr = false; var inObj = 0; //平衡组 balanceGroup // var bg = { // isBalance:[], // balanceChar:[], // push:function(isBalance,balanceChar){ // this.isBalance.push(isBalance); // this.balanceChar.push(balanceChar); // }, // pop:function(isBalance,balanceChar){ // this.isBalance.pop(isBalance); // this.balanceChar.pop(balanceChar); // }, // getLen:function(){ // return this.isBalance.lenght; // }, // prev:function(){ // var len = this.getLen // return len<2?[]:[this.isBalance[len-1],this.balanceChar[len-1]]; // } // } for(var i=0;i<len;i++){ var v = json[i]; switch(v){ case '{': if(inArr){ inObj++; } deep++; ret.push(v+'\n'+getSpace(deep)); break; case '[': inArr = true; ret.push(v); break; case '}': if(inArr){ inObj--; } deep--; ret.push('\n'+getSpace(deep)+v); break; case ']': inArr = false; ret.push(v); break; case ',': if(inArr){//在数组中时,须要特殊处理 if(inObj%2==1){ ret.push(v+'\n'+getSpace(deep)); }else{ ret.push(v); } }else{ ret.push(v+'\n'+getSpace(deep)); } break; default: ret.push(v); break; } } return ret.join(''); } function getSpace(deep){ var spaces = ''; while(deep-->0){ spaces += ' '; } return spaces; } exports.formatJson = formatJson;
/** * just two object */ var _config = { globalConfig:{ style:"background:#1A414B;border:1px solid #0a656c;border-radius:5px;opacity:0.9", width:300, height:150, padding:60, duration:200 }, title:{ text:"图表的标题", textAlign:"center", textColor:"white", font:"Bold 22px Arial" }, "type":"bar",//'line','pie' "x":[2013,2014,2015,2016,2017,2018], "y":[1500,900,800,2153,1000,523], "colors":[ "#A67D3D","#9932CD","#FF7F00","#42426F","#5C4033", "#5C3317","#4A766E","#97694F", "#6B238E","#9F5F9F","#4F4F2F","#B87333","#871F78", "#2F4F4F","#B5A642","#D9D919","#A67D3D","#8C7853", "#00FFFF","#FFFF00","#000000","#70DB93","#2F4F2F", "#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF" ], "style":{ barWidth:40, lineWidth:0.8, color:'black', barColor:'orange', textColor:"green", textAlign:"center", font:"16px Arial", animateType:"", animateDuration:200 }, "aXis":{ height:10 }, "yXis":{ width:10 }, "label":{ show:true, style:{ color:"black", font:"" } }, max:{ color:"#8C7853", textColor:"#8C7853" }, min:{ color:"#4A766E", textColor:"#4A766E" }, avg:{ color:"white", textColor:"white" } } ///////----------------------我是风骚的分隔线---------------------------//////// var config = { globalConfig:{ duration:2000 }, title:{ text:"历年赢利(单位:万元)", color:"white", font:"" }, "type":"bar",//'line','pie' "x":[2013,2014,2015,2016,2017,2018], "y":[1500,900,800,2153,1000,523], "colors":[ "#A67D3D","#9932CD","#FF7F00","#42426F","#5C4033", "#5C3317","#4A766E","#97694F", "#6B238E","#9F5F9F","#4F4F2F","#B87333","#871F78", "#2F4F4F","#B5A642","#D9D919","#A67D3D","#8C7853", "#00FFFF","#FFFF00","#000000","#70DB93","#2F4F2F", "#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF" ], "style":{ barWidth:40, lineWidth:0.8, color:'black', textColor:"green", textAlign:"left" }, "aXis":{ height:10 }, "yXis":{ width:10 }, "label":{ show:true, style:{ // color:"orang", font:"", type:"" } }, max:{ color:"#8C7853" }, min:{ color:"#4A766E" }, avg:{ color:"white" } } module.exports = { _config:_config, config:config }
var options = { id:"radarCanvas", title:"秋收", width:450, height:450, maxLines:5, style:"background:#0a656c;border:1px solid #eee;border-radius:5px", legends:["棉花","玉米"], names:['1月','2月','3月','4月','5月','6月','7月','8月'], series:[{ style:{ circle:{ show:true, solid:true, radius:6,//半径 color:"blue", lineWidth:6, lineColor:"orange" }, label:{ show:true, textColor:"orange", textAlign:"left", font:"italic bold 12px/20px arial,sans-serif" } }, datas:[883,8,22,8,12,19,13,8] },{ datas:[20,17,18,177,18,14,20,15] }] } var _options = { title:"雷达图", width:450, height:450, maxLines:5, style:"background:#0a656c;border:1px solid #eee;border-radius:5px", radar:{ line:{//雷达线 lineWidth:1, lineColor:"#999" }, axis:{//雷达主线 lineWidth:1, lineColor:"#888" }, circle:{//雷达点 show:false, solid:true, radius:3,//半径 color:"orange", lineWidth:1, lineColor:"orange" }, centerCircle:{//中心点 show:false, solid:true, radius:15,//半径 color:"blue", lineWidth:1, lineColor:"black" }, label:{ show:true, textColor:"white", textAlign:"center", font:"italic bold 16px arial,sans-serif" }, title:{ show:true, textColor:"orange", textAlign:"center", font:"italic bold 20px/30px arial,sans-serif" }, legends:{ show:true, width:30, height:20, colors:["orange","blue"] }, padding:50 }, legends:["棉花","玉米"], names:['1月','2月','3月','4月','5月','6月'], series:[{ style:{ // line:{ // lineWidth:1, // lineColor:"orange" // }, circle:{ show:true, solid:true, radius:3,//半径 color:"blue", lineWidth:1, lineColor:"orange" }, label:{ show:true, textColor:"white", textAlign:"left", font:"italic bold 12px/20px arial,sans-serif" } }, datas:[13,8,22,8,12,19] },{ style:{ // line:{ // lineWidth:1, // lineColor:"blue" // }, circle:{ show:true, solid:true, radius:3,//半径 color:"red", lineWidth:1, lineColor:"orange" }, label:{ show:true, textColor:"#eee", textAlign:"left", font:"italic bold 12px/20px arial,sans-serif" } }, datas:[20,17,18,17,18,14] }] } module.exports = { options:options, _options:_options }
Editor Settings
Theme
Key bindings
Full width
Lines