zoukankan      html  css  js  c++  java
  • js实现深度拷贝

    js实现拷贝,使用普通赋值对象,在操作其中一个对象值的时候,另一个也会更改,不符合需求

    因此引入深度拷贝,以下为实现深度拷贝的几种法:

    Object.assign

    // 合并多个对象
    var target = { a: 1, b: 1 };
    var source1 = { b: 2, c: 2 };
    var source2 = { c: 3 };
    Object.assign(target, source1, source2);

    注意: 这个是伪深度拷贝,只能拷贝第一层

    递归拷贝

    function deepClone(source){
      const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
      for(let keys in source){ // 遍历目标
        if(source.hasOwnProperty(keys)){
          if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下
            targetObj[keys] = source[keys].constructor === Array ? [] : {};
            targetObj[keys] = deepClone(source[keys]);
          }else{ // 如果不是,就直接赋值
            targetObj[keys] = source[keys];
          }
        }
      }
      return targetObj;
    } 

    ... 拼接对象

    let obj = {
        name: 'admin'
    }
    
    let obj2 = {
        age: 14,
        ...obj
    }
    
    console.log(obj2)     // { age: 14, name: 'admin' }

  • 相关阅读:
    【2019/3/23】周进度报告
    第十周总结
    程序员修炼之道-从小工到专家阅读笔记01
    第九周总结
    用户模板和用户场景
    一维数组最大子数组续
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    第七周总结
  • 原文地址:https://www.cnblogs.com/cap-rq/p/11753927.html
Copyright © 2011-2022 走看看