美文网首页
深度复制对象的属性---Js深拷贝

深度复制对象的属性---Js深拷贝

作者: 蜻蜓路过风 | 来源:发表于2019-11-18 10:19 被阅读0次

完整实现方法1

Es6新增的Symbol由于不是引用类型,只有深拷贝
WeakMap和WeakSet由于无法遍历,无法深拷贝

function extend(parent, children) {
    var i,
        toStrF = Object.prototype.toString,
        strC = "[Object Array]"
    children = children || {}
    for (i in parent) {
        if (parent.hasOwnProperty(i)) {
            if (typeof parent[i] === "object") {
                if(parent[i] instanceof Set) {
                    children[i] = new Set([...parent[i]])
                } else if(parent[i] instanceof Map) {
                    children[i] = new Map([...parent[i]])
                } else {
                    children[i] = (toStrF.call(parent[i]) === strC) ? [] : {};
                    extend(parent[i], children[i])
                }
            } else {
                children[i] = parent[i]
            }
        }
    }
    return children
}

实现方法2

利用JSON.parse(JSON.stringify())做属性拷贝,但是需注意此方法会丢失如时间对象,正则对象等

function extend(parent, children) {
    children = children || {}
    for( i in parent) {
        if(parent.hasOwnProperty(i)) {
            children[i] = parent[i]
        }
    }
    children = JSON.parse(JSON.stringify(children))
    return children
}

实现方法3

如果需要复制的对象属性中没有引用类型时,可直接用...

let a = {...b}

相关文章

  • 深度复制对象的属性---Js深拷贝

    完整实现方法1 Es6新增的Symbol由于不是引用类型,只有深拷贝WeakMap和WeakSet由于无法遍历,无...

  • 浅拷贝与深拷贝NSMutableCopy、NScopy

    1.浅拷贝和深拷贝的区别 浅拷贝只是复制对象本身,对象属性包含的对象不复制,不产生新对象,直接指向原有对象。 深拷...

  • 浅拷贝和深拷贝

    浅拷贝和深拷贝都是只针对Object,Array这样的复杂对象。浅拷贝只复制一层对象的属性,而深拷贝则是递归复制了...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • 深拷贝 浅拷贝 - iOS

    对象拷贝的两种方式:深复制 浅复制 ,浅复制不拷贝对象本身,仅拷贝指向对象的指针 (指针拷贝),深复制直接拷贝整个...

  • 19.深拷贝和浅拷贝

    简单意思就是深复制和浅复制的区别 浅拷贝 创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本...

  • JS中数组和对象的 深复制(拷贝)与浅复制(拷贝)

    JS中数组和对象的 深复制(拷贝)与浅复制(拷贝) 1.js中有五种简单的数据类型(null,string,und...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • ES6之扩展运算符-对象

    Spread扩展运算符 (1) 复制对象(深拷贝) 拷贝了对象实例的属性对象的扩展运算符(...)用于取出参数对象...

网友评论

      本文标题:深度复制对象的属性---Js深拷贝

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