JavaScript合并对象(深拷贝合并)

Object.assign合并对象属于浅拷贝,只能合并一层,不能实现深拷贝。

image.png

为了实现深拷贝,可以使用以下方法:

function deepAssign() {
    let name, options, src, copy
    let length = arguments.length
    // 记录要复制的对象的下标
    let i = 1
    // target默认是第一个参数
    let target = arguments[0] || {}
    // 如果target不是对象,我们是无法进行复制的,所以设为{}
    if (typeof target !== 'object') {
        target = {}
    }
    // 循环遍历要复制的对象
    for (; i < length; i++) {
        // 获取当前对象
        options = arguments[i]
        // 要求不能为空 避免extend(a,,b)这种情况
        if (options != null) {
            for (name in options) {
                // 目标属性值
                src = target[name]
                // 要复制的对象的属性值
                copy = options[name]

                if (copy && typeof copy == 'object') {
                    // 递归调用
                    target[name] = deepAssign( src, copy)
                } else if (copy !== undefined) {
                    target[name] = copy
                }
            }
        }
    }

    return target
}
复制代码

使用如下:

image.png

代码的实现参考了Jquery中extend的实现。

参考链接

猜你喜欢

转载自juejin.im/post/7041883967926042660