对象混合
基本思路:
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)
}
478

被折叠的 条评论
为什么被折叠?



