【JS】(数组、对象)深拷贝函数的封装
1 function deepClone (obj) {
2 let newObj;
3 if (Array.isArray(obj)) { // 判断复制的⽬标是不是数组
4 newObj = [];
5 } else if (typeof obj === 'object') {
6 newObj = {};
7 } else {
8 newObj = obj;
9 };
10 if (typeof obj === 'object') {
11 for (item in obj) {
12 if(obj.hasOwnProperty(item)) {
13 if(obj[item] && typeof obj[item] === 'object') {
14 newObj[item] = deepClone(obj[item])
15 } else {
16 newObj[item] = obj[item]
17 }
18 }
19 }
20 }
21 return newObj;typeof array
22 }
23 let obj = {name:'⼩明',age:20}
24 newObj = deepClone(obj)
当然,⽤JSON对象的parse和stringify也能完成深拷贝,但是⽤JSON.parse(JSON.stringify(obj))拷贝会有⼀个问题,就是如果数组或者对象中的属性为undefined、function和symbol时,转换过程中会被忽略
例:const obj = {name:'⼩明',age:20,subject:{a:100,b:null,c:undefined}}
const newObj = JSON.parse(JSON.stringify(obj))
console.log(newObj) // {name:'⼩明',age:20,subject:{a:100,b:null}}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论