首页 > 其他分享 >js 数组和对象的深拷贝的方法

js 数组和对象的深拷贝的方法

时间:2024-02-04 11:12:26浏览次数:28  
标签:arr console log js arr2 数组 var 拷贝

数组深拷贝的方法

方法一:for循环实现

复制代码
var arr = [1,2,3,4,5]
var arr2 = copyArr(arr)
function copyArr(arr) {
    let res = []
    for (let i = 0; i < arr.length; i++) {
     res.push(arr[i])
    }
    return res
}
复制代码

 

方法二:slice方法
原理也比较好理解,他是将原数组中抽离部分出来形成一个新数组。我们只要设置为抽离全部,即可完成数组的深拷贝,如下
var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)
arr[2] = 5
console.log(arr)
console.log(arr2)

 

 

方法三:concat方法原理更加粗暴。它是用于连接多个数组组成一个新的数组的方法。那么,我们只要连接它自己,即可完成数组的深拷贝。代码如下

 

 

 

var arr = [1,2,3,4,5]
var arr2 = arr.concat()
arr[2] = 5
console.log(arr)
console.log(arr2)

方法四:ES6扩展运算符实现用下面的方法实现数组的深拷贝是最简单的

 

 

var arr = [1,2,3,4,5]
var [ ...arr2 ] = arr
arr[2] = 5
console.log(arr)
console.log(arr2)

 

 

 对象的深拷贝

  • 最简单的深拷贝(JSON.stringify() 和JSON.parse())
  • 先把对象使用JSON.stringify()转为字符串,再赋值给另外一个变量,然后使用JSON.parse()转回来即可。
  • let object1 = {undefined
    a: 1,
    b: 2,
    c: 3
    };

    let object2 =JSON.parse( JSON.stringify(object1));
    object2.a=11;

    console.log(object1,object2);

    > Object { a: 1, b: 2, c: 3 } Object { a: 11, b: 2, c: 3 }

标签:arr,console,log,js,arr2,数组,var,拷贝
From: https://www.cnblogs.com/hellofangfang/p/18005813

相关文章

  • 树状数组
    树状数组总结前言树状数组是数据结构中的一股清流,代码简洁,思路清晰,又好理解qwq。前置芝士lowbit:https://www.cnblogs.com/zhouruoheng/p/18003331简介树状数组是一种基于lowbit的用于维护\(n\)个数前缀和信息的数据结构。支持:快速求前缀和,复杂度为\(O(\log{n})\)。......
  • Object.assign详解(对象的浅拷贝以及合并)
    Object.assign详解 一、Object.assign是什么?首先了解下Object.assign()是什么。我们先看看ES6官方文档是怎么介绍的?Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。简单来说,就是Object.assign()是对象的静态方法,可以用......
  • 寻找两个有序数组的中位数(4)
    4MedianofTwoSortedArrays问题描述:给定两个大小为m和n的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m+n))。你可以假设nums1和nums2不会同时为空。示例1:nums1=[1,3]nums2=[2]则中位数是2.0示例2:n......
  • 两数之和-输出有序数组
    167TwoSumII-Inputarrayissorted问题描述:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1和index2,其中index1必须小于index2。说明:返回的下标值(index1和index2)不是从零开始的。你可以假设每个输入......
  • 合并两个有序数组
    88.合并两个有序数组问题描述:给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。示例:输......
  • 新手如何快速学习爬虫逆向?-->>爬虫之js逆向百例
    《个人练习》各位爬虫逆友如有需要请及时留言或者加vx:wzwzwz0613该案例只对学习js逆向的爬虫逆友提供技术交流,请勿进行商业交易,谢谢!技术交流群v+:......
  • nodejs的下载安装
    8、nodejs的作用在vscode打开项目后,由于项目依附于我们的npm,我们需要将npm中的依赖下载下来,npm又依附于nodejs,故需要下载nodejs。下载node并安装:https://nodejs.org/dist/v12.14.0/nodev12.14.0-x64.msi; 9、设置npm镜像(同设置maven) ......
  • c语言小练习——字符串长度、拷贝、拼接、比较
    /* 使用c语言知识实现下面程序: 1,实现strlen函数的功能 2,实现strcpy函数的功能 3,实现strcat函数的功能 4,实现strcmp函数的功能 不允许使用已有的str函数*/1#define_CRT_SECURE_NO_WARNINGS2#include<stdio.h>3#include<string.h>4#include<stdbool.h>5#......
  • [SWPUCTF 2021 新生赛]jicao--json_decode()函数
    源码<?phphighlight_file('index.php');include("flag.php");$id=$_POST['id'];$json=json_decode($_GET['json'],true);if($id=="wllmNB"&&$json['x']=="wllm"){echo$flag;}?>......
  • node.js安装版本管理
    一、安装nodejs(使用nvm的方式)一、nvm说明nvm主要是用来管理 nodejs 和npm版本的工具,可以用来切换不同版本的nodejs。安装nvm之前先卸载nodeWindows系统完全卸载删除Node.js1.打开cmd命令行窗口,输入npmcacheclean--force回车执行2.打开控制面板,在控制面板中把Node.j......