拷贝操作 笔记

2021-03-30  本文已影响0人  squidbrother
基本知识
浅拷贝与深拷贝的区别
浅拷贝
  1. 数组浅拷贝
//copy一个全新的数组
var a1 = [12,45,47,56,213,4654,154];
var a2 = Array.from(a1);

//slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
var a1 = [12,45,47,56,213,4654,154];
var a2 = a1.slice(0);
  1. 对象浅拷贝 Object.assign({},source)
var x = {
  a: 1,
  b: { f: { g: 1 } },
  c: [ 1, 2, 3 ]
};
var y = Object.assign({}, x);
深拷贝
  1. 通过递归解析解决
var testObj = {
    a: 1,
    b: {
        name:'zhangsan'
    },
    c: [1,2,3]
};

function deepClone(tar){
    //非对象或者null直接返回
    if(typeof tar != 'object' || tar == null){
        return tar; 
    };
    
    var result;
    if(tar instanceof Array ){
        result = [];
    }else{
        result = {};
    };
    
    for(var attr in tar){
        //忽略掉那些从原型链上继承到的属性
        if(tar.hasOwnProperty(attr)){
            result[attr] = deepClone(tar[attr]);
        };
    }
    
    return result;
}

var obj2 = deepClone(testObj);
obj2.c[1] = 2222;
console.log(testObj);
console.log(obj2);
  1. 通过JSON解析解决 JSON.parse(JSON.stringify(source))
var x = {
  a: 1,
  b: { f: { g: 1 } },
  c: [ 1, 2, 3 ]
};
var y = JSON.parse(JSON.stringify(x));

未完待续...

上一篇 下一篇

猜你喜欢

热点阅读