Kafka 摩尔投票法 LeetCode multithreading plugins nuget Egret Engine 河南普通话 android实战项目 cpm怎么计算 java 数据分析 matlab求矩阵最大值 不用u盘装双系统 安装python mysql临时表 python数据 python命令行 python正则匹配 python程序实例 java对象和类 java怎么配置 java多线程处理 java的框架 java中文文档 java字符比较 linux入门基础 ntscan 高效能人士的七个习惯下载 马赛克软件 din字体 完美手游模拟器 tt语音官网 tableau下载 js发送http请求 babelrc mp4剪切合并大师 文件分割 allowtransparency ps光照效果 向日葵9
当前位置: 首页 > 学习教程  > 编程语言

js 改写对象(包括方法)转字符串

2020/8/11 19:43:45 文章标签:

js 改写对象(包括方法)转字符串

    • 对象转字符串
    • 字符串转对象
    • 总结

js中将对象转化为字符串可以用JSON.stringify,字符串转对象可以用JSON.parse。这两个方法在大部分的情况下都很好用,但是这两个方法在进行字符串转换的时候,会丢失对象中的方法。我们有时候会想要保留对象中的方法,这就需要进行一些额外的操作。

对象转字符串

对象转字符串要保留函数的思路是将对象中的函数转化为字符串,然后再调用JSON.stringify将更改过的对象转化为字符串。方法如下:

// 返回一个将对象中的函数都转化为字符串的对象 不直接在原对象上面改
function stringifyFunction(obj){ 
	let newobj = JSON.parse(JSON.stringify(obj))
	for(let key in obj){ 
		if(obj[key] instanceof Function){  
			newobj[key] = obj[key].toString().replace(/[\n\t]/g,"");
			continue;
		} 
		if(obj[key] instanceof Object){  
			newobj[key] = stringifyFunction(obj[key]);
		}
	} 
	return newobj;
}

function objectToString(obj){  // 用于替代JSON.stringify函数
	let _object = stringifyFunction(obj);  // 将对象中的函数转为字符串
	return JSON.stringify(_object)  // 将对象转为字符串
}

字符串转对象

思路主要是先用JSON.parse将字符串转为对象,然后使用正则表达式匹配对象中的属性,找出函数字符串使用Function对象转为函数。方法如下:

function stringToFunction(obj){  // 将对象中的函数字符串转化为函数
	var regex =  /^((function\s)|.)([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)\s\{.*\}/  //匹配函数字符串
	for(let key in obj){
		if(obj[key] instanceof Object){
			stringToFunction(obj[key]);
		}else{
			if(regex.test(obj[key])){ // 是一个函数
				try{
					let params = obj[key].substring(obj[key].indexOf('(')+1,obj[key].indexOf(')'));
					let operation = obj[key].substring(obj[key].indexOf("{")+1,obj[key].length-1);
					obj[key] = new Function(params, operation);
				}catch(e){
						console.log(e)
				}
			}
		}
	}
	return obj
}

function stringToObject(string){  // 用于替代JSON.parse
	let obj = JSON.parse(string);  //将字符串转为对象
	return stringToFunction(obj)    // 将对象中的函数字符串转为函数
}

总结

修改以后的两个函数在对象没有方法的时候,与原本的JSON.stringify以及JSON.parse是一样的,仅单独对属性为方法的情况进行处理。


本文链接: http://www.dtmao.cc/news_show_100169.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?