返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js数组直接赋值的问题(js数组的浅拷贝与深拷贝方法)
  • 909
分享到

js数组直接赋值的问题(js数组的浅拷贝与深拷贝方法)

摘要

1、数组的直接赋值属于数组的浅拷贝,js存储对象都是存内存地址,所以浅拷贝会导致新数组和旧数组共用同一块内存地址,其中一个数组变化,另一个数组也会相应的变化。 var a =[1,2

1、数组的直接赋值属于数组的浅拷贝,js存储对象都是存内存地址,所以浅拷贝会导致新数组和旧数组共用同一块内存地址,其中一个数组变化,另一个数组也会相应的变化。

var a =[1,2,3];
var b=a;
a[0]=30;
console.log(a,b);

//结果: [30, 2, 3]   [30, 2, 3]

2、数组内部不含有引用类型,使用slice() 、concat() 和 assign() 方法都属于数组的深拷贝,一个数组变化,另一个数组不受影响。

数组的concat方法

var a=[1,2,3];
var b=[].concat(a); 
a[0]=30;
console.log(a,b);

//结果:[30, 2, 3]  [1, 2, 3]

使用es6的展开操作符: …arr

var a=[1,2,3];
var b=[].concat(a); 
var c=[...a]; 
a[0]=30;
console.log(a,b,c);

//结果:[30, 2, 3]  [1, 2, 3] [1, 2, 3]

利用split join map方法

let arr1=[1,2,3];
var newArr4 = arr1.join(" ").split(" ").map(function(i){
    return parseInt(i);
    
}); 
arr1[0]=30;
console.log(arr1,newArr4);

//VM1175:1 (3) [30, 2, 3] (3) [1, 2, 3]

3、数组内部含有引用类型,使用slice() 、concat() 和 assign() 方法,非引用类型的值属于深拷贝,引入类型的值属于浅拷贝,一个数组变化,另一个也会相应的变化。

4、深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。

1、通过JSON.stringify转化成字符串再通过JSON.parse()解析成原数组。

let arr=[{a:1,b:2},{a:3,b:4}]; 
let arr1=JSON.parse(JSON.stringify(arr)); 
arr[0].a=10;
console.log(arr,arr1); 

//输出结果如下
(2) [{…}, {…}]
    0: {a: 10, b: 2}
    1: {a: 3, b: 4}

(2) [{…}, {…}]
    0: {a: 1, b: 2}
    1: {a: 3, b: 4}

2、利用Jquery的$.extend方法。

let arr=[{a:1,b:2},{a:3,b:4}]; 
let arr1=$.extend(true,[],arr); 
arr[0].a=10;
console.log(arr,arr1); 

//输出结果如下
(2) [{…}, {…}]
    0: {a: 10, b: 2}
    1: {a: 3, b: 4}
    
(2) [{…}, {…}, contains: ƒ, each: ƒ, uniquelize: ƒ]
    0: {a: 1, b: 2}
    1: {a: 3, b: 4}

更多关于js数组直接赋值的问题和js数组的浅拷贝,深拷贝方法请查看下面的相关文章

--结束END--

本文标题: js数组直接赋值的问题(js数组的浅拷贝与深拷贝方法)

本文链接: https://lsjlt.com/news/169409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js数组直接赋值的问题(js数组的浅拷贝与深拷贝方法)
    1、数组的直接赋值属于数组的浅拷贝,JS存储对象都是存内存地址,所以浅拷贝会导致新数组和旧数组共用同一块内存地址,其中一个数组变化,另一个数组也会相应的变化。 var a =[1,2...
    99+
    2022-11-13
    JS数组直接赋值 js数组浅拷贝 js数组深拷贝 js array直接赋值 js array浅拷贝 js array深拷贝
  • js中的赋值 浅拷贝和深拷贝详细
    目录1、js内存2、赋值3、浅拷贝4、深拷贝前言: 在学习下面文章前我们简单了解一下的内存的知识,以下先简要提一下 1、js内存 js内存,或者说大部分语言的内存都分为栈和堆。基本数...
    99+
    2024-04-02
  • Python直接赋值与浅拷贝和深拷贝实例讲解使用
    目录1.字典浅拷贝实例2.更多实例直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的...
    99+
    2022-11-13
    Python直接赋值 Python浅拷贝 Python深拷贝
  • Java Cloneable接口的深拷贝与浅拷贝方法
    本篇内容主要讲解“Java Cloneable接口的深拷贝与浅拷贝方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Cloneable接口的深拷贝与浅拷贝方法”吧!...
    99+
    2023-06-29
  • JS实现深拷贝和浅拷贝的方式详解
    目录一. 基本类型数据拷贝二. 引用类型数据拷贝1、浅拷贝2、深拷贝说道数据拷贝就离不开数据类型,在JS中数据类型分为基本类型和引用类型 基本类型: number, boolean,...
    99+
    2024-04-02
  • js中区分深拷贝与浅拷贝的实战过程
    目录一、自我理解二、数据存储形式(1)基本数据类型存储于栈中(2)引用数据类型存储与堆中三、怎样实现深拷贝?(1)借助JSON对象的parse和stringify(2)手写递归(3)...
    99+
    2024-04-02
  • javascript中怎么深拷贝与浅拷贝二维数组和对象
    javascript中怎么深拷贝与浅拷贝二维数组和对象,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.浅拷贝: 将原对象或原...
    99+
    2024-04-02
  • python列表中的赋值与深浅拷贝
    首先创建一个列表 a=[[1,2,3],4,5,6] 一、赋值 a=[[1,2,3],4,5,6]b=aa[0][1]='tom'print(a)print(b)结果: [[1, 'tom', 3], 4, 5, 6][[1, 'tom'...
    99+
    2023-01-30
    赋值 深浅 列表中
  • js浅拷贝的方法有哪些
    这篇文章给大家分享的是有关js浅拷贝的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScrip...
    99+
    2023-06-14
  • C语言结构体成员赋值的深拷贝与浅拷贝详解
    目录浅拷贝结构体中不存在指针成员变量时结构体中存在指针成员变量时深拷贝结论浅拷贝 C语言中的浅拷贝是指在拷贝过程中,对于指针型成员变量只拷贝指针本身,而不拷贝指针所指向的目标,它按字...
    99+
    2024-04-02
  • C++构造函数的类型,浅拷贝与深拷贝详解
    目录一、无参构造函数二、含参构造函数三、拷贝构造函数四、深拷贝和浅拷贝总结一、无参构造函数 1.如果没有定义构造函数,则系统自动调用此默认构造函数,且什么都不做。 2.如果用户自定义...
    99+
    2024-04-02
  • C++构造函数的类型,浅拷贝与深拷贝实例分析
    本文小编为大家详细介绍“C++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、无...
    99+
    2023-06-29
  • 如何进行python列表中的赋值与深浅拷贝
    今天就跟大家聊聊有关如何进行python列表中的赋值与深浅拷贝,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  首先创建一个列表  a=[[1,2,...
    99+
    2024-04-02
  • JS实现深拷贝的几种方法介绍
    引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。 此篇文章...
    99+
    2024-04-02
  • golang数组拷贝的方法有哪些
    在Go语言中,有以下几种方法可以进行数组的拷贝: 使用循环遍历:可以使用for循环将一个数组的元素逐个拷贝到另一个数组中。 fu...
    99+
    2023-10-20
    golang
  • Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
    程序中常常需要复制一个对象, 按思路应该是这样的 a = [1, 2, 3] b = a # [1, 2, 3] print b 已经复制好了,但是现在得改变一下第一个元素的值把它改成5 ...
    99+
    2022-06-04
    模块 操作 方法
  • Java数组的拷贝方式有哪些
    这篇文章主要介绍了Java数组的拷贝方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。深拷贝与浅拷贝的区别假设现在有原数组A以及拷贝后的数组B,若是改变A中的某一个值,...
    99+
    2023-06-29
  • 详解Java数组的四种拷贝方式
    目录深拷贝与浅拷贝的区别1. for循环进行拷贝拷贝数值类型拷贝引用类型2. copyof / copyOfRange拷贝数值类型拷贝引用类型3. arraycopy拷贝数值类型拷贝...
    99+
    2024-04-02
  • java编程中拷贝数组的方式及相关问题分析
    JAVA数组的复制是引用传递,而并不是其他语言的值传递。这里介绍java数组复制的4种方式极其问题:第一种方式利用for循环:int[] a={1,2,4,6};int length=a.length;int[] b=new int[len...
    99+
    2023-05-30
    java 数组复制 ava
  • 5种Java中数组的拷贝方法总结分享
    目录1、for循环2、调用clone()方法3、Arrays类中的Arrays.copyOf()方法4、copyOfRange()方法5、System.arraycopy()方法1、...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作