使用原生JS的递归函数 实现深拷贝

1.先获取数据的类型

data: 需要实现深拷贝的数据

 function getType(data) {

         对象的原型转成字符串再指向当前对象截取指定长度

            return Object.prototype.toString.call(data).slice(8, -1);

        };

 var a= getType([1,2,3])

conlse.log(a) // Array

2.实现递归拷贝

判断当前的的数据类型是什么 如果是Object 就建立一个{}  如果是Array就建立一个[]

都不是就return 返回传进来的数据

function deepClone(data) {

 if(getType(data) == 'Object'){

                var res = {};

            } else if(getType(data) == 'Array'){

                var res = [];

            } else {

                return data;

            }

 将data数据中的每一个属性名和属性值存储到res中   用for in遍历

            for(var key in data){

   判断要存储的是否是Array或者Object  如果是 调用deepClone 自己的函数

     if(getType(data[key]) == 'Object' || getType(data[key]) == 'Array'){

                    res[key] = deepClone(data[key]);

                } else {

                    res[key] = data[key];

                }

            }

            设置返回值

             return res;

        }

 

var r = deepClone(obj)

console.log(r == obj); // false

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值