JS深浅拷贝

浅拷贝

只能拷贝一层对象

常用的浅拷贝方法

1. concat
数组

const arr = [1,2,3];
let newArr = arr.concat();
newArr[0] = 5;
console.log(arr);
console.log(newArr);

在这里插入图片描述
2.slice
数组

const arr = [1,2,3];
let newArr = arr.slice();
newArr[0] = 5;
console.log(arr);
console.log(newArr);

在这里插入图片描述
3. 扩展运算符
数组和对象

const arr = [1,2,3];
let newArr = [...arr];
newArr[0] = 5;
console.log(arr);
console.log(newArr);

在这里插入图片描述
4. Object.assign
第一个参数是目标对象,第二个参数是源对象。

const arr = {
    name: 'xiaobai',
    age: '21'
};
let newArr = Object.assign({},arr,{name: 'huang'});
console.log(newArr);

在这里插入图片描述
5. 手动实现
思路:遍历对象,把源对象的属性和属性值放在一个新对象。
一些小细节:

  • 源对象只能是对象或数组
  • 判断源对象是数组还是对象,生成新对象或数组
const shallowClone = target => {
    if (typeof target === 'object' && target !== null) {
        let newTarget = Array.isArray(target) ? [] : {}
        for(let i in target) {
            if(target.hasOwnProperty(i)) {
                newTarget[i] = target[i];
            }
        }
        return newTarget;
    }
    return target;
}

深拷贝

解决无限极的对象嵌套问题,实现彻底的拷贝

常用的深拷贝方法:

1. JSON.parse(JSON.stringify());
大多数情况用这个

2. 手动实现

简单版:
思路:
在进行拷贝的时候,判断属性值是否是对象,如果是则递归调用深拷贝函数。

const deepClone = target => {
    if(typeof target === 'object' && target !== null) {
        let newTarget = Array.isArray(target) ? [] : {};
        for(let key in target) {
            if(target.hasOwnProperty(key)) {
                newTarget[key] = typeof newTarget[key] === 'object' ? deepClone(newTarget[key]) : target[key];
            }
        }
        return newTarget;
    }
    return target;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值