首页 > 其他 > 详细

深拷贝

时间:2020-04-02 00:29:08      阅读:76      评论:0      收藏:0      [点我收藏+]
 1 let obj = {
 2         name: ‘james‘,
 3         age: 23,
 4         height: 198,
 5         color: [‘red‘, ‘green‘, ‘yellow‘, ‘deeppink‘],
 6         firends: {
 7           name: ‘xiaoming‘,
 8           age: 23 
 9         },
10         hope: function () {
11           console.log(‘movies‘); 
12         }
13       }
14 
15       
16       let obj1 = {}
17       function deepClone(target, origin) {
18         let obj1 = target || [],
19             toStr = Object.prototype.toString,
20             arrStr = "[object Array]";
21             for (var key in origin) {
22               if(origin.hasOwnProperty(key)) {
23                 if(typeof(obj[key]) === ‘object‘) {
24                   if(toStr.call(origin[key]) === arrStr) {
25                     target[key] = []
26                   }else {
27                     target[key] = {}
28                   }
29                   deepClone(target[key], origin[key])
30                 }else {
31                   target[key] = origin[key]
32                 }
33               }
34             }
35             return target
36       }
37       deepClone(obj1, obj)

1、思路 :

  • 首先遍历对象 for in 循环
  • 判断是否原始值  typeof   object
  • 判断是数组还是对象  这里使用对象原型上toString方法
  • 简历想对应的数组对象
  • 再次进行递归

深拷贝

原文:https://www.cnblogs.com/doumian/p/12616824.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!