Javascript deep clone

代码如下:

deepCopy: function(obj) {
  return _.isObject(obj) ? JSON.parse(JSON.stringify(obj)) : obj;
},

转载如下:

粘贴过来格式就乱了: 原文在此:http://blog.sibo.me/2014/08/20/javascript-deep-clone.html

结论

深度克隆是一个复杂的任务,并没有一个完美的解决方案,要根据情况谨慎对待。

如果是简单场景,可以使用 JSON.parse(JSON.stringify(obj)) 完成。

如果自己完全知道对象的数据结构,手动克隆将是最稳妥也是最高效的方式。

参考

  1. http://stackoverflow.com/questions/7914968/cloning-whats-the-fastest-alternative-to-json-parsejson-stringifyx
  2. What is the difference between a deep copy and a shallow copy?
  3. Explanation of Deep and Shallow Copying
  4. Deep Copy vs JSON Stringify / JSON Parse
  5. What is the most efficient way to clone an object?
时间: 2024-08-25 04:11:30

Javascript deep clone的相关文章

JavaScript 中的对象深度复制(Object Deep Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b中的元素的时候,也就改变了对象a中的元素. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制.

Java - deep clone

先让我描述一下问题:我在某Action(struts2.x)-A中写了一个功能P,以当前用户的某个标识F == 1时需要走这个功能,而且这个功能因某些原因已经侵入到了其他一些method中.顺便一提,A中获得当前用户session的method已经被父类封装好了.然后我的代码已经push上去了,第二天有人告诉我能不能暂时去掉这个功能.一个个注释掉太麻烦了,于是我决定在这个A中override获得当前用户session的method,并将F赋值为0. 于是我只需要来个shallow copy就可以

Java中的浅克隆(shallow clone)与深克隆(deep clone)

Summary 浅克隆与深克隆对于JavaSE来说,是个难度系数比较低的概念,但不应该轻视它. 假设一个场景:对于某个list,代码里并没有任何对其的直接操作,但里面的元素的属性却被改变了,这可能就涉及到这个概念. Description 浅克隆指仅copy对象位于栈内存中的引用(reference).copy后,新旧两个引用指向同一个堆内存对象(即同一内存区域),但是堆内存中实际的对象copy前后均只有一个.使用"==" operator比较二者的地址会返回true.(不同引用,同一

深入探讨JavaScript如何实现深度复制(deep clone)

在代码复用模式里面有一种叫做“复制属性模式”(copying properties pattern).谈到代码复用的时候,很有可能想到的是代码的继承性(inheritance),但重要的是要记住其最终目标——我们要复用代码.继承性只是实现代码复用的一种手段,而不是唯一的方法.复制属性也是一种复用模式,它跟继承性是有所不同的.这种模式中,对象将从另外一个在对象中获取成员,其方法是仅需将其复制即可.用过jQuery的都知道,它有一个$.extend()方法,它的用途除了扩展第三方插件之外,还可以用来

浅谈浅克隆(shallow clone)和 深克隆(deep clone)

区别就在于是否对对象中的引用变量所指向的对象进行拷贝. 1.浅克隆/浅复制/浅拷贝 浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝. 2.深克隆/深复制/深拷贝 深拷贝是指在拷贝对象时,同时会对引用指向的对象进行拷贝. 示例代码: 1 import java.util.Date; 2 3 class Wife implements Cloneable { 4 private String name; 5 priv

深拷贝(deep clone)与浅拷贝(shallow clone)

一.浅复制和深复制概念 浅复制(浅克隆): 被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不是复制它所引用的对象. 深复制(深克隆): 被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象, 而不再试原有的那些被引用的对象.换言之,深复制把复制的对象所应用的对象都复制了一遍. 二.Java的Clone()方法 [定义在Object类中] clone方

[Javascript] Deep partial equal Object LooksLike

function looksLike(a, b) { return ( a && b && Object.keys(b).every(bKey => { const bVal = b[bKey] const aVal = a[bKey] if (typeof bVal === 'function') { return bVal(aVal) } return isPrimitive(bVal) ? bVal === aVal : looksLike(aVal, bVal

javascript组件开发之基类继承实现

上一篇文章大概的介绍了一下关于javascript组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组件的实现方式都差不多,为了便于管理,让代码尽量统一,所以到对组件封装一个base基类(javascript没有类的概念,暂且这样叫吧),关于javascript的oo实现:可以参考这篇文章javascript oo实现:写得很赞,膜拜,我改写的这个基于John Resig的实现方式. 基类的封装方式

也说Javascript对象拷贝及疑问

也说Javascript对象拷贝及疑问 一.浅拷贝 当我们需要将一个对象拷贝至另一个对象时,我们一般会这么实现 function shadowCopy(source,target){ var target=target||{}; for(var i in source) { target[i]=source[i]; } return target; } var a={name:'Lily',age:19}; var b=shadowCopy(a);//b={name:'Lily',age:19}