js中深拷贝的方法

1:原生js中递归函数拷贝

深拷贝:将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据 ,两个对象或数组不共享一块内存

                    <script>
        function deepcope(obj){
            // 定义一个接受对象
              let newobj;
             //判断obj是数组还是对象
                if(obj instanceof Array){
                newobj=[]
                obj.forEach(item=>{
                    newobj=deepcope(item)
                })}
                // 对象   
                else if(obj instanceof Object)
        {
            newobj={}
            for(let i in obj){
                newobj[i]=deepcope(obj[i])
            }
                }else {
                    newobj=obj
                }
            return newobj
        }
          let obj={
              abc:'123',
              def:[{a:1,b:2,c:3},{q:8,w:9}],
              qwe:{e:4,f:5}
            }
         let news=deepcope(obj)
         news.pop()
            console.log(news);
            console.log(obj);
    </script>

2:jQuery 中$.extend

jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。
$.extend( [deep ], target, object1 [, objectN ] )
deep 可选,Boolean类型 指示是否深度合并对象,默认为false。如果该值为true
target Object类型 目标对象
object1 可选。 Object类型 第一个被合并的对象。

                     var obj = {};
                    var object = { name: 'Bruce', career: "doctor" };
                    jQuery.extend(deep,obj, object); //obj = { name: 'Bruce', career: "doctor" }

3:函数库 lodash,提供 cloneDeep 实现

1.下载相关库
npm i --save lodash
2.在相关文件中引入
import _ from "lodash"
3.调用 _.cloneDeep() 方法实现深拷贝

      <script>
    import _ from "lodash"
    var objects = [{ 'a': 1 }, { 'b': 2 }];
   var deep = _.cloneDeep(objects);
  console.log(deep[0] === objects[0]); //false
 </script>

————————————————
版权声明:本文为CSDN博主「Wyyyy1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44389562/article/details/111036129

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容