js实现深拷贝

一、深浅拷贝

在使用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

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

posted @ 2018-06-12 18:19  果子煎饼  阅读(1139)  评论(0编辑  收藏  举报