美文网首页
Javascript实现对象拷贝

Javascript实现对象拷贝

作者: 可追 | 来源:发表于2018-07-26 18:50 被阅读0次

在日常开发中,当想用某个变量去获取另外一个对象变量数据时,最直接的方法是:

let obj2 = obj1

由于对象是引用类型,当改变obj2中某属性的值时,obj1中的属性也会随着改变,有时候我们并不希望出现这种情况。那么,我们可以采取以下方法:

let obj2 = Object.assign({}, obj1)

这时,当改变obj2中某属性时,obj1的对应属性并不会随之变化,很多情况下是这样,但当obj1内部的属性又是对象时,这样的方法还是会出现在obj2中改变某属性,obj1中的属性也随之改变的情况。这样的拷贝,我们称之为浅拷贝。要实现深拷贝,简便的方法是借用JSON.parse和JSON.stringify来实现:

let obj2 = JSON.parse(JSON.stringify(obj1))

这样,obj2与obj1已经没有半毛钱关系了,随意改变obj2中的属性值,obj1都不会有任何改变,这样我们称之为深拷贝。但是利用JSON的方法,会把function给忽略掉,也就是说,当数据中有方法时,方法并不会被拷贝。但是,我们真的还想把方法也给拷贝,那只有自己写方法了。我自己写的一个方法如下:

let cloneObject = (obj) => {

        let object

        if(obj && typeof obj === 'object') {

            if(obj instanceof Array) {

                object = []

                for(let i = 0; i < obj.length; i++) {

                    if(obj[i] && typeof obj[i] === 'object') {

                        object.push(cloneObject(obj[i]))

                    }else{

                        object.push(obj[i])

                    }

                }

            }else{

                object = {}

                for(let key in obj) {

                    let value = obj[key]

                    if(typeof value === 'object') {

                        object[key] = cloneObject(value)

                    }else {

                        object[key] = value

                    }

                }

            }

        }

        return object

    }

这样的方法传入数组或都对象就能实现对象深拷贝

相关文章

  • Javascript实现对象拷贝

    在日常开发中,当想用某个变量去获取另外一个对象变量数据时,最直接的方法是: let obj2 = obj1 由于对...

  • JS深拷贝的实现方法

    1、使用递归的方式实现深拷贝 2、通过 JSON 对象实现深拷贝 注意:JSON对象实现深拷贝无法实现对对象中方法...

  • 五、面试总结(五)

    对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方...

  • JavaScript深拷贝、浅拷贝

    JavaScript深拷贝、浅拷贝 浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也...

  • JavaScript对象02

    JavaScript对象02 对象浅拷贝 浅拷贝:不会考虑对象的层次结构,不会考虑任何引用类型, 换句话说,浅拷贝...

  • javascript如何实现对象的深拷贝

    javascript语言中数据类型一共分为两大类:一是基本数据类型;而是复杂数据类型。基本数据类型包括:Strin...

  • es6中扩展运算符...的使用方式

    es6中扩展运算符... 用于参数对象的所有可遍历属性,拷贝到当前对象之中。可以实现深拷贝实现合并数组 实现深浅拷贝

  • 实现深拷贝的几种方法(JS)

    使用递归 通过 JSON 对象实现深拷贝 lodash函数库实现深拷贝

  • 对象的浅拷贝和深拷贝

    对象的深拷贝和浅拷贝 如何 实现一个深拷贝 递归拷贝1、外部库 lodash =>cloneDeep2、自实现

  • 递归实现对象深拷贝

    ex:递归实现对象深拷贝

网友评论

      本文标题:Javascript实现对象拷贝

      本文链接:https://www.haomeiwen.com/subject/zgximftx.html