js数组里面包含复杂数据类型如何实现深拷贝

数据类型

基本数据类型:String、Number、Null、undefined、Boolean、Symbol、BigInt;

引用数据类型:Object

深浅拷贝问题

简单的介绍下深浅拷贝

浅拷贝

浅拷贝:就是拷贝的地址,当你拷贝过后改动里面的属性或者值的时候,那么它原来里面的值或者属性就会随之改变。

下面代码就是实现的一个浅拷贝,虽然是拷贝过来了,但是呢,可以通过打印发现变量person和obj里面的salary的值都成了52000,62000.这就是浅拷贝。

 let persons = [
            {
                username: 'aji',
                sex: '男',
                salary: 50000
            },
            {
                username: 'gpang',
                sex: '男',
                salary: 60000
            }
        ]
        let obj = persons;
        obj.map(item =>{
            item.salary +=2000;
        })
        console.log(obj);
        console.log(persons);

我们简单分析一下,这是一个数组里面的是有对象的。这就可以视为包含了复杂数据类型。那怎么实现深拷贝,不改变原来数组里面对象属性的值呢?

下面深拷贝就会讲解这个问题

深拷贝

深拷贝:拷贝的是值,拷贝过后改变值不会影响原来数据类型里面的值。

实现一维数组的深拷贝的方法有:简单的for循环,数组的slice()、concat()方法,或者是ES6的rest参数(...).

实现对象的深拷贝方法:for循环,转成JSON在转换成对象。

那么下面的代码就运用的到,用JSON.parse和JSON.stringify相互转换,然后用map遍历,

就可以实现深拷贝。

let persons = [
            {
                username: 'jjb',
                sex: '男',
                salary: 50000
            },
            {
                username: 'gpang',
                sex: '男',
                salary: 60000
            }
        ]
        let obj=JSON.parse(JSON.stringify(persons));
        obj.map(item =>{
            item.salary +=2000;
        })
        console.log(obj);
        console.log(persons);

小结

  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞关注!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿勋w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值