首页 > Web开发 > 详细

JS-深拷贝

时间:2021-08-20 11:39:50      阅读:6      评论:0      收藏:0      [点我收藏+]

JS-深拷贝

/**
 * 深拷贝
 */

const obj1 = {
    age: 20,
    name: ‘xxx‘,
    address: {
        city: ‘beijing‘
    },
    arr: [‘a‘, ‘b‘, ‘c‘]
}

const obj2 = deepClone(obj1)
obj2.address.city = ‘shanghai‘
obj2.arr[0] = ‘a1‘
console.log(obj1.address.city) // beijing
console.log(obj1.arr[0]) //a 


/**
 * 深拷贝的实现
 */

function deepClone(item) {
    // 判断是否为需要遍历的对象
    if (typeof item !== ‘object‘ || item == null) {
        // 直接返回
        return item
    }

    // 初始化一个返回结果
    let result;

    // 判断是数组还是对象 初始化result
    if (item instanceof Array) {
        result = []
    } else {
        result = {}
    }

    // 递归 注意是要循环对象的所有可枚举属性
    // 然后再使用hasOwnProperty来忽略掉不是自身的继承的属性
    for (let key in item) {
        if (item.hasOwnProperty(key)) {
            // 递归调用!
            result[key] = deepClone(item[key]);
        }
    }
    return result
}
点:
  • 递归
  • hasOwnProperty
  • for...in循环对象的所有枚举属性,然后再使用hasOwnProperty()方法来忽略继承属性。(常用)

JS-深拷贝

原文:https://www.cnblogs.com/yangyu-1997/p/15165004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!