关于json对象的深拷贝

摘要:
前两天写程序,有一个是对后台返回的json数据进行整理然后再使用,用到了关于json的拷贝。我在我的一篇博客中提到过对数组的拷贝。分为深度拷贝,和浅拷贝。 同样的关于json数据的拷贝也有相同的简单方法,var新对象=JSON.parse;这样就复制这个老对象了。因为es6已经想到了这一点,所以在es6的语法中就有一个叫做object.assign()的方法,官方对于这个方法是这样解释的:Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。

前两天写程序,有一个是对后台返回的json数据进行整理然后再使用,用到了关于json 的拷贝。我在我的一篇博客中提到过对数组的拷贝。分为深度拷贝,和浅拷贝。这里附上链接其实对于数组的拷贝是比较简单的,大不了就自己循环一下,然后放到一个新数组中,或者是在我博客中提到的使用slice(0) 的办法。 

同样的关于json数据的拷贝也有相同的简单方法,var 新对象 = JSON.parse(JSON.stringify(老对象));这样就复制这个老对象了。但是这样会有一个弊端。(对于后台传输过来的数据是没有问题的)。弊端就是如果这个老对象中不仅仅是简单的数据,而是其中定义了方法的话,那么这样的话,是不能赋值成功的。

那这样的话,是不是就只能自己写方法,自己写程度复制了呢。答案是不是。因为es6已经想到了这一点,所以在es6的语法中就有一个叫做object.assign()的方法,官方对于这个方法是这样解释的:Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。然后咱们就可以开开心心的复制了。请看下面的代码

1         var json1 ={
2             "name":"cheng",
3             "age":18,
4             "fun":function(a){
5 console.log(a);
6 }
7 }
8         //json1.fun(123);
9 console.log(json1);
10         for(i injson1){
11             if(i=="age"){
12                 json1[i] = 19;
13 }
14 }
15         var json2 =JSON.parse(JSON.stringify(json1));
16         //var json2 = Object.assign({},json1);
17         json2.age = 20;
18         console.log(json1,json2);

这样就可以复制json中的数据了。这里记录一下

免责声明:文章转载自《关于json对象的深拷贝》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用element-ui的走马灯carousel轻松实现自适应全屏banner图fasttext的使用,预料格式,调用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java原型模式之浅拷贝-深拷贝

一、是什么?         浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量仅仅复制引用,不复制引用的对象          深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制          内部机制:       (1)关于Object类的clone方法          默认实现为“浅拷贝”,重写O...

文件的创建、复制、删除和移动等操作

  创建文件命令:touch命令 功能说明:改变文件或目录时间。 语  法:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>] [--help]   [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时...

RocketMQ 消息偏移量 Offset 和 CommitLog

消息偏移量 Offset 概念 message queue 是无限长的数组,一条消息进来下标就会涨1,下标就是 offset,消息在某个 MessageQueue 里的位置,通过 offset 的值可以定位到这条消息,或者指示 Consumer 从这条消息开始向后处理。 message queue 中的 maxOffset 表示消息的最大 offset,...

svn clean up命令的使用

以下内容来自网友: https://blog.csdn.net/reggergdsg/article/details/77678771 SVN的清理命令,我们经常会使用。这个命令的原理,我们还是有必要深究一下的。当SVN改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心。在进行任何修改操作时,SVN都会把日志记录到日志文件中,然后执行log文件...

ArcGIS基础篇(1)——如何将本地制作的模型进行拷贝?

在ArcGIS中构建模型,是对ArcGIS各类工具进行拖动、串联,形成一个工作流,能重复使用,通用性强,可形成自己的工具。 构建模型在此不叙述,主要讲一下如何将模型(Model)拷贝。 一般在ArcGIS中制作模型后,进行保存,会默认保存到默认的Home路径的Toolbox.tbx中,如下图所示。 (1)在Toolboxes目录-My Toolboxes...

Druid 集群方式部署 —— 启动服务

启动 Master 服务器 拷贝 Druid 的分发包和你修改过的配置到 Master 服务器上。 如果你已经在你的本地计算机上修改了配置,你可以使用 rsync 来进行拷贝。 rsync -az apache-druid-apache-druid-0.21.1/ MASTER_SERVER:apache-druid-apache-druid-0.21....