zoukankan      html  css  js  c++  java
  • JS | 数组的深拷贝与浅拷贝

    浅拷贝与深拷贝的区别

    浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存(操作新旧对象时会相互影响)。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
    下面总结浅拷贝和深拷贝的几种方式:

    浅拷贝

    Object.assign

    var obj = { a: {a: "hello world", b: 31},b:34 }; 
    var cloneObj = Object.assign(obj); 
    cloneObj.a.a = "change world"; 
    cloneObj.b = 68; 
    cloneObj.a.b = 35; 
    console.log(obj); 
    //=> {a: {a: "change world", b: 31}b: 68} 
    console.log(cloneObj); 
    //=> {a: {a: "change world", b: 31}b: 68} 
    console.log(obj.a === cloneObj.a); 
    //=>true
    

    lodash的 _.clone

    var obj = { a: {a: "hello world", b: 31},b:34 };
    var cloneObj = _.clone(obj); 
    cloneObj.a.a = "change world" ; 
    cloneObj.a.b = 35; 
    cloneObj.b = 68 ; 
    console.log(obj); 
    //=>{a: {a: "change world", b: 35}b: 68} 
    console.log(cloneObj);  
    //=>{a: {a: "change world", b: 35}b: 68} 
    console.log(obj.a === cloneObj.a);
    //=>false
    

    ES解构

    var obj = { a: {a: "hello world", b: 31},b:34 }; 
    var cloneObj = {...obj}; 
    cloneObj.a.a = "change world"; 
    cloneObj.a.b = 35; 
    cloneObj.b = 68; 
    console.log(obj); 
    //=> {a: {a: "change world", b: 35}b: 34} 
    console.log(cloneObj); 
    //=> {a: {a: "change world", b: 35}b: 68} 
    console.log(obj.a === cloneObj.a); 
    //=>true
    

    深拷贝

    lodash的 _.cloneDeep

    var obj = { a: {a: "hello world", b: 31},b:34 }; 
    var cloneObj = _.cloneDeep(obj); 
    cloneObj.a.a = "change world" ; 
    cloneObj.a.b = 35; 
    cloneObj.b = 68 ; 
    console.log(obj); 
    //=> {a: {a: "hello world", b: 31}b: 34} 
    console.log(cloneObj); 
    //=> {a: {a: "change world", b: 35}b: 68} 
    console.log(obj.a === cloneObj.a); 
    //=> false
    

    JSON.parse(JSON.stringify(obj))

    var obj = { a: {a: "hello world", b: 31},b:34 }; 
    var cloneObj =JSON.parse(JSON.stringify(obj)); 
    cloneObj.a.a = "change world" ; 
    cloneObj.a.b = 35; 
    cloneObj.b = 68 ; 
    console.log(obj); 
    //=> {a: {a: "hello world", b: 31}b: 34} 
    console.log(cloneObj); 
    //=> {a: {a: "change world", b: 35}b: 68} 
    console.log(obj.a === cloneObj.a); 
    //=> false
    
  • 相关阅读:
    c++中sort等算法中比较操作的规则
    数据结构(c++)(1)-- 栈
    Problem 10: Summation of primes
    Problem 9: Special Pythagorean triplet
    Problem 7: 10001st prime
    Problem 8: Largest product in a series
    Problem 5: Smallest multiple
    Problem 6: Sum square difference
    Problem 4: Largest palindrome product
    Problem 3: Largest prime factor
  • 原文地址:https://www.cnblogs.com/jj81/p/13669664.html
Copyright © 2011-2022 走看看