码迷,mamicode.com
首页 > Web开发 > 详细

js实现深拷贝

时间:2018-06-12 19:43:18      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:实现   obj   let   span   prot   func   strong   举例   UNC   

一、深浅拷贝

在使用JS对数组或者object进行操作的时候,如果只是简单的将它赋予其他变量,那么只要更改其中的任何一个,然后其他的也会跟着改变

举例说明:

        let arr = [1, 2, 3]
        let arr2 = arr
        arr[0] = 3
        console.log(arr[0])//输出3
        console.log(arr2[0])//输出3
        let obj = {
            name: ‘obj‘
        }
        let obj2 = obj
        obj2.name=‘obj2‘
        console.log(obj.name)//输出obj2
        console.log(obj2.name)//输出obj2

解决思路:创建一个新的对象(数组)使用遍历的方法把原有的数据加到新的对象(数组)里面

解决代码:

    function deepclone(obj){
        let data
        if(Object.prototype.toString.call(obj)===‘[object Array]‘){
            data=[]
            for (let index = 0; index < obj.length; index++) {
                data.push(deepclone(obj[index]))
            }
        }else if(Object.prototype.toString.call(obj)===‘[object Object]‘){
            data={}
            for(let key in obj){
                data[key]=deepclone(obj[key])
            }
        }else {
            return obj
        }
        return data
    }
测试代码:
let obj1 = {
name: ‘obj1‘,
}
let obj2 = deepclone(obj1)
console.log(obj2.name)//输出obj1
obj1.name=‘obj‘
console.log(obj2.name)//还是输出obj1



let arr = [1, 2, 3]
let arr2 =deepclone(arr)
console.log(arr2[0])//输出1
arr[0]=9
console.log(arr2[0])//还是输出1

以上测试代码不严谨,但是懒啊,大家如果发现问题可以留言,一起学习共同进步  哈哈哈哈哈哈哈~~~~~!!!

js实现深拷贝

标签:实现   obj   let   span   prot   func   strong   举例   UNC   

原文地址:https://www.cnblogs.com/shucaige/p/9174491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!