以下为深拷贝
/**
* ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 深拷贝 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
* @param {source} object 深拷贝对象
* ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 深拷贝 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
* **/
export const deepCopy = (source) => {
if (typeof source !== 'object') return source; //如果不是对象和数组的话直接返回
const target = Array.isArray(source) ? [] : {} //数组兼容
for (var k in source) {
// source.hasOwnProperty(k) 排除原型上的属性
if (source.hasOwnProperty(k)) {
// 如果是对象或者数组,就再执行一遍此函数
if (typeof source[k] === 'object') {
target[k] = deepCopy(source[k])
} else {
target[k] = source[k]
}
}
}
return target
}
- 首先判断如果不是对象或者数组,则返回原数据
- 定义一个空的数组或者对象
target来存放拷贝后的数据- 使用
for in遍历原数据,前提是要过滤掉原型上的属性。- 如果是对象或者数组,则重新执行一遍此函数。
- 否则则将数据拷贝并放入定义的
target变量中