介绍
这篇文章主要介绍JavaScript中数组怎么克隆,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
js主要分<>强基本数据类型强>及<强>引用数据类型>强两大类
基本数据类型包括:数字字符串,未赋值,null,布尔,象征(es6新增)
引用数据类型:对象数组,函数,数据等
注意:基本数据类型放在* *栈空间内* *,并且是按值存放,可以直接读取和操作。
引用数据类型存放在* *堆空间内* *(门),变量的值其实是指向堆空间的地址(钥匙),因此如果克隆这个变量,相当于复制钥匙。
让arr=[1、2、3、4、5) 让arr1 arr=//这一步相当于把arr栈空间的地址赋给了arr1,其实arr和arr1操作的是同一个堆空间的对象 arr1.push (6)//arr1=[1、2、3、4、5、6) console.log (arr)//[1, 2, 3, 4, 5, 6)
<强>因此对于引用类型的拷贝,需要拷贝堆空间的对象强>
<强>数组浅拷贝强>
1。运用数片组与concat方法返回一个<强>新数组的特性强>
让arr=[1、2、3、4、5) 让arr1=arr.slice ()//[1、2、3、4、5) 让arr2=arr.concat ()//[1、2、3、4、5)
2。简单粗暴的方法,遍历
让arr=[1、2、3、4、5) 让arr2=[] arr.forEach(项=祝辞{ arr2.push(项) } ) console.log (arr2)
3. es6新增方法——拓展运算符
让arr=[1、2、3、4、5) 让arr1=[…arr]//[1、2、3、4、5)
4. es6新增方法-Object.assign
让arr=[1、2、3、4、5)
让arr1=[]
Object.assign (arr1 arr)
console.log (arr1)//(1、2、3.4、5)
如果数组里嵌套数组和对象,<强>浅拷贝只会拷贝该数组或者对象存放在栈空间的地强> <强>址>强劲,因此无论在新旧数组中改变此地址指向的对象,两个数组<强>都会发生改变>强。因此我们需要深拷贝来拷贝此类数组。
<强>数组深拷贝强>
1。普通遍历,遍历到引用类型时候进行引用类型的拷贝
让arr=[1、2、3、4、5,{名称:& # 39;鲍勃# 39;},(& # 39;一个# 39;& # 39;b # 39;]] 函数克隆(arr) { 让arr1=[] arr.forEach(项=祝辞{//如果不是对象,将该值插入到新数组 如果(typeof(项目)!==& # 39;对象# 39;){ arr1.push(项) 其他}{//根据遍历的对象新建一个相同类型的空对象 让obj数组运算符=项目?[]:{} (var关键项){ 如果(item.hasOwnProperty(关键)){ obj[主要]=项目(例子) } } arr1.push (obj) } }) 返回arr1 } 让arr1=克隆(arr) arr1 [5] . name=& # 39; js # 39; console.log (arr & # 39; arr # 39;, arr1, & # 39; arr1& # 39;)
2。简单粗暴(能拷贝数组和对象,但不能拷贝函数)
让arr=[1、2、3、4、5,{名称:& # 39;鲍勃# 39;},(& # 39;一个# 39;& # 39;b # 39;]] 让arr1=JSON.parse (JSON.stringify (arr))
以上是“JavaScript中数组怎么克隆”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!