实现深拷贝的两种方法

递归深拷贝

首先了解什么是递归 简单来说递归就是函数内部自己调用自己
使用递归首先要找规律 然后找出口
下面是一个简单的递归demo 帮助大家了解下递归的使用技巧

// 计算1+2+3+...+10的和
        function fun(i){
            if(i==1){
                return 1
            }
            return i+fun(i-1)
        }
        console.log(fun(10));

        // 10+fun(9)
        // 10+9+fun(8)
        // 10+9+8+fun(7)
        // 10+9+8+7+fun(6)
        // 10+9+8+7+6+fun(5)
        // 10+9+8+7+6+5+fun(4)
        // 10+9+8+7+6+5+4+fun(3)
        // 10+9+8+7+6+5+4+3+fun(2)
        // 10+9+8+7+6+5+4+3+2+fun(1)
        // 10+9+8+7+6+5+4+3+2+1

接下来我们来看下如何使用递归实现深拷贝

        var obj = {
            name: '123',
            list: [{
                name: '456'
            }, {
                name: '789',
                say: 'qqq'
            }]
        }

        var a={};
        
        function fun(newobj,oldobj){
                for(var k in oldobj){
                    // 判断我们的属性值属于哪种数据类型
                    // 1.获取属性值 oldobj[k]
                    var item = oldobj[k];
                    // 2.判断这个值是否是数组
                    if(item instanceof Array){
                        newobj[k]=[];
                        fun(newobj[k],item);
                    // 3.判断这个值是否是对象
                    }else if(item instanceof Object){
                        newobj[k]={};
                        fun(newobj[k],item);
                    // 4.属于简单数据类型
                    }else{
                        newobj[k]=item;
                    }
                }
            }
            fun(a,obj);
            console.log(a);

有不懂的地方,大家可以用浏览器打断点看下每一步的执行步骤

接下来介绍一种简单的方法

JSON深拷贝

var data=[{
            name:'ya',
            list:[
                {name:'dddd'}
            ]
        }]
        // JSON 对象 作用:处理json格式的数据 其实就是数组和对象
        // JSON.stringify() 将数组或对象变为json字符串
        var dataStr=JSON.stringify(data);
        console.log(dataStr);
        
        // JSON.parse() 将json字符串转化为 数组或对象 并返回数组或对象
        var res=JSON.parse(dataStr);
        res.push({name:123})
        console.log(res);
        console.log(data);
        // json 字符串 与 普通字符串
        // 都是字符串 没区别 json 字符串长得像数组和对象 其实是字符串
        // json 对象与普通对象和数据区别是啥
        // 没区别  就是普通数组和对象 就是在 json 文件中按照 规定写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PinkSir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值