JS 深拷贝

174 阅读1分钟

以下为深拷贝

/**
 * ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 深拷贝 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
 * @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变量中