分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

js实现深拷贝

发布时间:2023-09-06 01:59责任编辑:彭小芳关键词:js

一、深浅拷贝

在使用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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved