一、深浅拷贝
在使用JS对数组或者object进行操作的时候,如果只是简单的将它赋予其他变量,那么只要更改其中的任何一个,然后其他的也会跟着改变
举例说明:
???????let arr = [1, 2, 3] ???????let arr2 = arr ???????arr[0] = 3 ???????console.log(arr[0])//输出3 ???????console.log(arr2[0])//输出3 ???????let obj = { ???????????name: ‘obj‘ ???????} ???????let obj2 = obj ???????obj2.name=‘obj2‘ ???????console.log(obj.name)//输出obj2 ???????console.log(obj2.name)//输出obj2
解决思路:创建一个新的对象(数组)使用遍历的方法把原有的数据加到新的对象(数组)里面
解决代码:
???function deepclone(obj){ ???????let data ???????if(Object.prototype.toString.call(obj)===‘[object Array]‘){ ???????????data=[] ???????????for (let index = 0; index < obj.length; index++) { ???????????????data.push(deepclone(obj[index])) ???????????} ???????}else if(Object.prototype.toString.call(obj)===‘[object Object]‘){ ???????????data={} ???????????for(let key in obj){ ???????????????data[key]=deepclone(obj[key]) ???????????} ???????}else { ???????????return obj ???????} ???????return data ???}
测试代码:
let obj1 = {
name: ‘obj1‘,
}
let obj2 = deepclone(obj1)
console.log(obj2.name)//输出obj1
obj1.name=‘obj‘
console.log(obj2.name)//还是输出obj1
???let arr = [1, 2, 3]
???let arr2 =deepclone(arr)
???console.log(arr2[0])//输出1
???arr[0]=9
???console.log(arr2[0])//还是输出1
以上测试代码不严谨,但是懒啊,大家如果发现问题可以留言,一起学习共同进步 哈哈哈哈哈哈哈~~~~~!!!
js实现深拷贝
原文地址:https://www.cnblogs.com/shucaige/p/9174491.html