标签:obj name offer 一步 数据类型 js let result newObj
手写递归深拷贝,必会的
<script>
// 定义一个嵌套深的对象,深拷贝
let obj = {
name: '张三',
list: [1, 2, 3]
}
//判断是否是基本数据类型,如果是直接return,因为复杂数据类型才会深拷贝
function deepClone(obj) {
//判断是否是基本数据类型,nul也是基本数据类型
if (typeof obj !== 'object' || obj == null) {
return obj
}
//初始化判断是数组还是对象 初始化返回结果
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
//for in 循环,数组和对象有原型,空的也有,没必要去拿obj原型上的方法或属性
for (let key in obj) {
//排除原型上的方法或属性 hasOwnProperty判断是否是自己私有属性
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]) //递归调用
}
}
return result
}
console.log(obj); //{name: '张三', list: Array(3)}
let newObj = deepClone(obj)
console.log(newObj); //{name: '张三', list: Array(3)}
// 检测一下深拷贝是否成
newObj.name = '李四'
console.log(newObj); //{name: '李四', list: Array(3)} ok 关机下班
</script>
标签:obj,name,offer,一步,数据类型,js,let,result,newObj 来源: https://blog.csdn.net/m0_57904695/article/details/122598430
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。