手写对象混合和克隆【JavaScript】

对象混合

基本思路:

1.先把混入的对象的的key和value加入到新的对象中

2.在判断被混的对象的key是否在混入的对象中,不在的话就加入新的对象

也可以直接调用原生的API实现混合:Object.assign({}, obj1, obj2)

this.myPlugin = {}

this.myPlugin.mixin = function (obj1, obj2) {
    let newObj = {}
    for (const obj in obj2) {
        newObj[obj] = obj2[obj]
    }
    for (const obj in obj1) {
        if (!(obj in obj2)) {
            newObj[obj] = obj1[obj]
        }
    }
    return newObj
}

对象克隆

基本思路:

1.首先判断如果是基本数据类型或者是null或者是函数就直接返回

2.遍历数组或者对象key,然后递归调用加入到新的数组或者对象

3.处理循环引用,定义一个Map,key是obj,value是result,如果缓存中存在直接返回,否则加入缓存

this.myPlugin.deepClone = function (obj) {
    const cache = new Map()
    function _deepClone(obj) {
        if (obj === null || typeof obj !== "object") {
            return obj
        }
        if (cache.has(obj)) {
            return cache.get(obj)
        }
        const result = Array.isArray(obj) ? [] : {}
        cache.set(obj, result)
        for (const key in obj) {
            result[key] = _deepClone(obj[key])
        }
        return result
    }
    return _deepClone(obj)
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值