slice, concat拷贝数据的理解

本文探讨了JavaScript中如何使用slice和concat方法实现数组拷贝。虽然这两种方法能快速创建新数组,但当数组包含对象时,拷贝的只是对象的引用,而非深拷贝。因此,对于对象数组,直接使用slice或concat进行拷贝会导致修改一个对象会影响到所有拷贝。
摘要由CSDN通过智能技术生成

众所周知,数组在JavaScript中如果简单的赋值[数组A] = [数组B],那么AB是共用同一个内存地址,修改A/B中任何一个都会造成两者一起变化。
这个时候就涉及到数组拷贝问题

使用slice()/concat()返回新数组实现拷贝

这种方法可以很简单的实现数组拷贝,直接调用数组方法,在代码中一句话就能搞定。
arr.slice(0): 数组的slice(star,end)方法,通过传入的参数截取数组,并且返回,截取后的数组,如果开头无结尾,就截取从开头到结尾的所有数据,slice()方法的数组是从1开始,所以slice(0)就是返回整个数组。
arr.concat(): 数组的concat([])方法,是将调用的数组和传入的数组链接,并且返回一个新数组。下面使用的时候没有传入需要拼接的数组,那就是返回原来的数组。

let arr = [1,2,3]
let new_arr1 = arr.slice(0)
let new_arr2 = arr.concat()
console.log(arr,new_arr1,new_arr2)
// 之后修改数据
arr.push(4)
new_arr1.shift()
new_arr2.unshift(0)
console.log(arr,new_arr1,new_arr2)

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值