如何创建只保留数据而不保留函数的javascript对象的副本?
我正在准备大对象,因此我还添加了一些函数来维护它们。我需要发送此对象以服务传入的查询。我认为发送函数也没有任何好处。我只想发送数据。如何剥离对象的函数,使其在发送时更精简 编辑:使用JSON.stringify和JSON.parse确认有效如何创建只保留数据而不保留函数的javascript对象的副本?,javascript,Javascript,我正在准备大对象,因此我还添加了一些函数来维护它们。我需要发送此对象以服务传入的查询。我认为发送函数也没有任何好处。我只想发送数据。如何剥离对象的函数,使其在发送时更精简 编辑:使用JSON.stringify和JSON.parse确认有效 l={} Object {} l.zz=19 19 l.f = function(){ console.log(this.zz) } function (){ console.log(this.zz) } l Object {zz: 19, f: funct
l={}
Object {}
l.zz=19
19
l.f = function(){ console.log(this.zz) }
function (){ console.log(this.zz) }
l
Object {zz: 19, f: function}
JSON.stringify(l)
"{"zz":19}"
JSON.parse(JSON.stringify(l))
Object {zz: 19}
只需使用JSON.stringify()生成一个字符串并对其进行解析
JSON.parse(JSON.stringify(obj))
生成一个字符串并对其进行分析:
JSON.parse(JSON.stringify(object))
此函数将执行数据属性的深度复制,以释放函数:
function deepCopyObject(src)
{
var tgt=[]
for (var x in src)
{
var p=src[x]
if (!(p instanceof Function))
{
if (p instanceof Object)
{
tgt[x]=copyObject(p)
}
else
{
tgt[x]=p
}
}
}
return tgt
}
要使用它,只需执行:
var myCopy=deepCopyObject(mySrc)
基本上,您可以使用
JSON.stringify
将对象转换为JSON字符串。它将把所有不是函数而是值的公共字段(由this
分配)放入JSON字符串中
然后将JSON.stringify
的输出放入JSON.parse
中,得到一个干净的对象,没有函数,只有值
基本上你只需要做的是:
var clean = JSON.parse(JSON.stringify(objectvariable));
下面是一些示例代码,它一步一步地将所有内容分解开来:-)
点击F12查看控制台中的输出
/**带有函数和值的示例对象**/
函数ObjectHolder(){
this.x=“你好”;
this.y=“世界”;
这个.z=“宇宙”;
this.which=false;
}
/**生成一个由布尔值定义的字符串**/
ObjectHolder.prototype.toString=函数(){
返回此.x++(this.which?this.y:this.z);
}
/**带有函数和值的示例对象**/
ObjectHolder.prototype.switchIt=函数(){
this.which=!this.which;
}
/**实例化对象**/
var takeit=newobjectholder();
/**显示当前输出,以查看其是否工作**/
log(takeit.toString());
/**测试反演**/
takeit.switchIt();
/**输出应该改变**/
log(takeit.toString());
/**把这个对象变成一个字符串**/
var str=JSON.stringify(takeit);
/**获取JSON字符串并将其转换为对象**/
var obj=JSON.parse(str);
/**显示值之间的差异**/
log(“带有函数的ObjectHolder(var takeit)对象”,takeit);
log(“JSON字符串”,str);
日志(“无功能对象”,obj)
simplyJSON.parse(JSON.stringify(object))
我实际上需要做很多清理工作。你认为这会比JSON stringify+parse更快吗?我的想法是我只需要做一个浅拷贝。tgt[x]=copyObject(p)将变成正确的tgt[x]=p。对于浅层复制,您可以避免递归调用。我认为它将比serialize+parse快,因为它节省了序列化JSON字符串对象的创建,也节省了解析时间。