首页 > 其他分享 >16.深拷贝/浅拷贝

16.深拷贝/浅拷贝

时间:2023-07-06 15:33:55浏览次数:23  
标签:obj name val 16 newObj let 拷贝

1. 浅拷贝:默认在改变新的数组的时候,也改变了原数组。

let obj = { name: "张三", age: 28 };
let qian = obj;
qian.name = "李四";
console.log(obj.name); //李四
console.log(qian.name); //李四

 

2. 深拷贝:

方式一:使用JSON.stringify()以及JSON.parse():

let obj = { name: "张三", age: 28 };
let strObj=JSON.stringify(obj);
let deep=JSON.parse(strObj);
deep.name= "李四";
console.log(obj.name); //张三
console.log(deep.name); //李四

方式二;concat(数组):

let arr1=['张三','王五']
let arr2=[]
let res=arr1.concat(arr2)
res[0]= "李四";
console.log(arr1[0]); //张三
console.log(res[0]); //李四

方式三:通过for in实现:

//data
let obj = { name: "张三", age: 28 };
//methods
deepCopy(val) {
    let newObj = {};
    for (let i in val) {
        newObj[i] = val[i];
    }
    return newObj;
}

方式四:递归:

//data
let obj = { name: "张三", age: 28 };
//methods
deepCopy(val) {
    //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
    var newObj = Array.isArray(obj) ? [] : {};
    //进行深拷贝的不能为空,并且是对象
    if (val && typeof val === "object") {
        for (i in val) {
            if (val.hasOwnProperty(i)) {
                if (val[i] && typeof val[i] === "object") {
                    newObj[i] = deepCopy(val[i]);
                } else {
                    newObj[i] = val[i];
                }
            }
        }
    }
    return newObj;
}

 

标签:obj,name,val,16,newObj,let,拷贝
From: https://www.cnblogs.com/chenJieLing/p/17532280.html

相关文章

  • 错误:rpmdb: BDB0113 Thread/process 8709/139671674841152 failed
    rpm库报错错误:rpmdb:BDB0113Thread/process8709/139671674841152failed:BDB1507ThreaddiedinBerkeleyDBlibrary错误:db5错误(-30973)来自dbenv->failchk:BDB0087DB_RUNRECOVERY:Fatalerror,rundatabaserecovery错误:无法使用db5- (-30973)打开Packages......
  • 面试题 16.07. 最大数值 ——一种基于乘法和位运算的解题思路
    剧透警告,没写过的勿触题目:编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。qwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqq......
  • leetcode-1629-easy
    SlowestKeyYouhaveabombtodefuse,andyourtimeisrunningout!Yourinformerwillprovideyouwithacirculararraycodeoflengthofnandakeyk.Todecryptthecode,youmustreplaceeverynumber.Allthenumbersarereplacedsimultaneously.I......
  • leetcode-1652-easy
    DefusetheBombYouhaveabombtodefuse,andyourtimeisrunningout!Yourinformerwillprovideyouwithacirculararraycodeoflengthofnandakeyk.Todecryptthecode,youmustreplaceeverynumber.Allthenumbersarereplacedsimultaneously......
  • P3134 [USACO16JAN] Lights Out G 关灯
    P3134[USACO16JAN]LightsOutG关灯目录P3134[USACO16JAN]LightsOutG关灯[USACO16JAN]LightsOutG题面翻译题目描述输入格式输出格式说明/提示题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示题目大意分析实现加入查找统计答案数据读入code题目传送门洛谷......
  • 【树分治】HDOJ 5016
    先预处理出每个点的最近点。。。。然后考虑固定根,对于每个根,从根到子树的路径中任选两条,如果dis[i]+dis[j]<w[j]。那么i就是j的一个合法点。。。。然后递归处理子树即可。。。。扩栈才过的。。。#include<iostream>#include<queue>#include<stack>#include<map>#includ......
  • Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
    https://blog.csdn.net/qq_21438461/article/details/130764349Linux系统编程C/C++以及Qt中的零拷贝技术:从底层原理到高级应用一、零拷贝技术的概念与价值(Zero-CopyConceptandValue)1.1什么是零拷贝(WhatisZero-Copy)1.2为什么我们需要零拷贝(WhyWeNeedZero-C......
  • LeetCode 160. 相交链表
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*getIntersectionNode(ListNode*headA,ListNode*headB){......
  • 16-银行常见6种反欺诈手段
    16.银行6种常见的反欺诈手段信贷业务是商业银行的主要利润来源,对整个银行的经营举足轻重。信贷业务下沉的同时,其风险也在不断扩张,基于新技术和新场景的欺诈形式和手段不断衍生,欺诈方式更具场景化、专业化、智能化。 16.1申请人真实性验证常用的特征模块有面部识别、身份证二......
  • PowerDesigner反向导入表+PowerDesigner的ER图设计+PowerDesigner连接外键的线(版本16.
    使用PowerDesigner导入表+PowerDesigner画ER图+PowerDesigner设置外键ps:①ER图:就是PD中的PhysicalDiagram一、导入表,并设置备注为PD中的显示名称参考:https://blog.csdn.net/weixin_37530941/article/details/107331105利用建表语句sql导入表1、新建数据库模型2......