JavaScript|实现深拷贝和浅拷贝(含测试源码)

本博文源于js基础,主要探讨实现js的深拷贝和浅拷贝问题。先实现浅拷贝后实现深拷贝

浅拷贝

算法思想

准备一个空的结果数组,然后遍历原数组,在结果数组中插入原数组的每一项即可。

测试效果

在这里插入图片描述

附上源码

<script>
	function clone(arr) {
		var _arr = [];
		for(var i=0;i<arr.length;i++) {
			_arr.push(arr[i]);
		}
		return _arr;
	}
</script>

深拷贝

实现原理

考虑到数组是对象里面可以复杂类型的值,如果仅仅像上面做的话,是无法做到深层次拷贝的。需要用递归先将元素扁平化,然后一个个拷贝。

测试效果

在这里插入图片描述

附上源码

检测o的类型,如果o的类型是基本类型值,则返回o本身即完成了o的克隆,如果o是数组,则遍历它的每一项,递归调用deepClone深克隆它的每一项,如果o是对象,则遍历每一个属性,递归调用deepClone深克隆它的每一个属性值

<script>
	function deepClone(o) {
		if(
			typeof o=="string" ||
			typeof o == "number" ||
			typeof o == "undefined" ||
			typeof o == "boolean"
		){
			return o;
		}else if(Array.isArray(o)) {
			var _arr = [];
			for(var i=0;i<o.length;i++) {
				_arr.push(deepClone(o[i]));
			}
			return _arr;
		}else if(typeof o == "object") {
			var _o = {};
			for(var k in o ) {
				_o[k] = deepClone(o[k]);
			}
			return _o;
		}
	}
</script>

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/106238831