JavaScript一个数组赋值给另一个数组

【逐点突破】JavaScript 数组的总结:数组简介、定义数组、赋值和使用、常用方法等 逐点突破第三期来啦!!快来看看这期都有哪些内容吧! 阅读详情

记录一次修复bug的经历

网页在更新迭代时,新版本在开发的时候莫名奇妙的会产生数据上的错误,期初还以为是cookie的储存过多导致的,因为出问题之处的新老版本代码完全一致,即在更新迭代时没有针对该处代码进行修改。

代码基本结构

这一js文件在最开始声明了多个const列表变量,然后在后面会多次引用这几个列表变量。

问题所在

新版本的网页在onload函数中加入了部分代码,这部分代码中包含了对几个const列表变量的引用,想法是新声明一个变量直接等于某个const列表变量,即声明副本,然后对副本进行修改,即只是想使用const变量中的值,修改的话只修改副本,不动原const变量。但是在JavaScript中,直接用将A列表的值用等号赋值给B列表,这就只是把B作为了A的引用,改变B会导致A也会被改变。
所以,在onload函数中加入对const列表变量的引用后,导致了原变量的改变,进而导致后面的代码的数据产生错误。

数组的深拷贝和浅拷贝。

内容引用自 https://blog.youkuaiyun.com/qq_33769914/article/details/100015740

浅拷贝,两个数组会相互影响

var array1 = [1];
var array2 = array1;
array2[1] = 2;
console.log(array1); // [1, 2]
console.log(array2); // [1, 2]

要改变array2的值而且不影响array1就要进行深拷贝,切断两个数组之间的关联。

// 1、使用扩展运算符...进行复制,需要es6语法的支持
var a = ['1','2','3']
var b = [...a];

b[3] = "4";
console.log(b); // ["1", "2", "3", "4"]
console.log(a); // ["1", "2", "3"]

// 2、使用concat或者slice
var arr1=[1];
var arr2 = arr1.concat([]); 
// 这种情况深拷贝以后,arr2 == arr1是true。也可以使用var arr4 = arr1.concat(); arr4也深拷贝了arr1.并且arr1 != arr4
// 不改变原来数组的情况下,拷贝出数组b ,且满足 b != a。使用concat()
// 或者是 var arr2 = [].concat(arr1); 
// 或者是 var arr2 = arr1.slice(); 
js 数组只传值,不传地址 问题:JS有个很严重的bug,就是如果使用 "="进行赋值的时候,若新变量的值改了,旧的变量也会跟这边 如 A = "old"; B = A;//此时A="old",B="old" 接着: B = "new";//此时A="new",B="new" 是不是很烦,原因是因为js默认是地址传值(不懂的可以参考:C语言相关的-指针及地址传值),所以解决办法用下面语法替换就行了 B =... 阅读详情

相关推荐

javascript将数组插入到另一个数组中的代码

下面的代码主要功能就是将数组arr2插入到数组arr1的index位置,需要的朋友可以参考下

js将一个数组的属性赋值到另一个数组中(数组属性映射)

1.两个数组中,分别存储了两种不同的属性值时,想把其中一个数组中的属性,能够保存到另一个数组中 要求:如果两个数组的对应id相同,则把数组B中的name属性添加到A中 数组A–包含了id和age属性 var arrayA = [ { id: 1001, age: '20' }, { id: 1002, age: '21' }, { id: 1003, age: '22' } ] 数组B–

qq_38589895的博客 1万+

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1161

将数组赋值给新数组, 改变新数组原数组发生变化

因此对其中一个数组的修改也会影响另一个数组。这种行为是由 JavaScript 中数组赋值的引用传递特性所导致的,不仅限于 Vue.js。实际上这两个变量共享同一个数组引用。这意味着它们指向相同的内存地址。在 Vue.js 中,当你将一个数组直接赋值给一个新的变量时,

qq_44535402的博客 1825

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 214

SAP-PM设备模块-PM主数据之功能位置

SAP-PM模块学习

TRUIXIANG的博客 5136

笔记:js数组常用方法

join():将数组内的所有元素连接在一起转换为字符串,有一个可选参数表示每个元素之间的连接符,并返回这个字符串 var arr = [1, 2, 3, 4] arr.join() //返回”1,2,3,4“ arr.join('-') //返回”1-2-3-4“ sort():将数组中的每个元素按一定条件排序后并返回排序后的新数组,一个参数(会改变原数组) 所以在排序时默认按照字母表顺序进行排列,若首字母相同,则按第二个字母的先后顺序排列。 var arr = ['cherry', 'app..

weixin_48554465的博客 1507

BIM Revit教程(六)尝试安装 Revit 时显示“Autodesk Revit 已安装。”

在安装Revit或RevitLT时,若系统提示“AutodeskRevit版本已安装”,通常是由于旧版本残留文件未完全清除所致。解决方案包括:1.通过控制面板或Windows设置卸载旧版本Revit,确保所有相关组件被移除;2.使用Autodesk卸载工具(AdskUninstallHelper)进一步清理;3.谨慎操作注册表,删除与Revit相关的残留项;4.确保系统有至少30GB的可用磁盘空间;5.完成上述步骤后,重新尝试安装Revit。此外,文章还提到了一个免费功能商店,供用户寻找提效工具,并鼓励粉丝

ZOZO_888的博客 2128

JavaScript——js 将一个数组的属性赋值到另一个数组中

JavaScript——js 将一个数组的属性赋值到另一个数组中

qq_43201350的博客 1447

傻瓜教程:使用GeoServer发布离线地图服务

一、离线地图下载 离线地图分为两种:一种叫“金字塔瓦片”数据,一种叫“矢量地图数据”。我们看的在线地图比如,百度,谷歌,高德等等网页上的地图,都是金字塔瓦片;另外一种是手机上用来导航的,比如高德地图APP,也可以下载离线地图数据,这个就是矢量的。 卫星影像地图都是金字塔瓦片,无矢量数据。 因此,我们所说的离线地图下载通常都是指离线地图金字塔瓦片数据下载。 离线地图金字塔瓦片搭建的离线地图服务分很多种:一般有WEB方式,TMS、WMTS/WMS等等,不同的应用有不同...

米兰的小码农的博客 1万+

线性自抗扰控制LADRC(一)---基础知识

LADRC(Linear Active Disturbance Rejection Control)是ADRC的线性化版本,通过简化非线性模块(如ESO和反馈律)降低计算复杂度,适用于实时控制系统(如电机驱动)。

ApexYuan 2074

[js] 将数组赋值给另一个数组

var a = ['北京','上海','广州'] var b = a; // 数组是引用数据类型,变量存的是内存地址, a[0] = 1; //当a改变的时候b也发生了改变 console.log(a) // [1, "上海", "广州"] console.log(b) //[1, "上海", "广州"] 数组是引用数据类型,变量存的是内存地址,var b = a;就是将a的内存地址给了b,那么a和b指向同一个地址,当a改...

qq_14993591的博客 2927

SAP_ABAP_MM_BAPI清单案例教程——采购发票校验/预制_BAPI_INCOMINGINVOICE_PARK_MIRO

SAP ABAP BAPI_INCOMINGINVOICE_PARK BAPI 采购发票预制 采购发票校验 代码模版

java_zhong1990的专栏 1961

python数组赋值给另一个数组_通过内存分析来解释 JavaScript 数组赋值问题

本文转载于 SegmentFault 社区社区专栏:夕阳下的奔跑作者:G_Koala_C起因是在逛 sf 的时候看到这样一个问题:javascript 为什么 arr 数组没有被赋值?var arr=[1,2];var arr0=[{a:1,b:2}];function fun(data){ data = arr0}fun(arr);console.log(arr) //...

weixin_39953578的博客 485

Motoman机器人离线编程——Motocom32开发简介

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程——Motocom32开发简介 Motoman机器人离线编程——Visio Studio环境配置 Motoman机器人离线编程——Motocom32库函数的使用与封装 Motoman机器人离线编程——Motocom32参考文献及注意事项 Motoman机器人离线编程——MotocomES介绍 ...

冯Jungle的个人博客 8713

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js中数组赋值给另一个数组

c++中复制数组可以用memcpy int len = 5; float a[len] = {1.0 ,1.1, 1.2, 1.3, 1.4}; float b[len]; memset(b, 0, len*sizeof(float)); memcpy(b, a, len * sizeof(float)); JS中复制数据要用点特殊方法,因为JS中的数组是引用。 var a=[1,2...

8473

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js给两个数组赋值,改变一个,另一个也变化

js给两个数组赋值,改变一个,另一个也变化

Mojito2417的博客 1646

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

js数组赋值,修改其中一个数组的值,另一个数组也会变化

问题背景: 在vue中,我在data中定义了数组对象的结构,但后台数据不需要每项对象中的其中一个属性,如果直接删除此数组的属性,则页面显示属性的地方会出现undefind。如果赋值给另一个数组,修改另一个数组的值,同样会出现此问题。 解决方法: let newList = JSON.parse(JSON.stringify(this.questionsList)) 把要赋值的数据转成json字符串,然后再转成json数据赋值。 注意 :如果数组的每项不是对象,可以通过结构赋值的方法实现这种需求,如* ne

qdm13209211861的博客 2222

前端-js数组转对象,并且将一个对象的值赋值给另一个对象

今天碰到一个需求哈.1.需要为数组中的每一个对象添加不存在的stock(库存)属性,而这个属性是在另一个对象中 接下来上代码 吼吼~ // 需要遍历后端返回的一个数组,并且为每一个item添加stock字段 let productAttrObj = {} // 定义一个对象 res.data.productAttr[0].attrValue.map(item => { item.stock = '' let key = item.attr // 该对象的键名 let value =

weixin_52852561的博客 3709

js赋值给java 数组_javascript中把一个数组的内容全部赋值给另外一个数组

如:var a = [1,2,3,4];var b= [];b = a;这个不是把值赋值过去而是b作为a的引用,b改变的是a如何b指向的是一个新数组,a把元素值全部赋值过去?1、普通数组可以使用 var b = [].concat(a);-------------------------------------------------------------------------------...

weixin_39951181的博客 1834

关于Js中创建二维数组的坑

Js中二维数组的创建: 首先JavaScript只支持 一维数组 ,但我们可以通过一些方法实现矩阵以及多维数组 其中普通的创建方法并不会出现什么问题: (1) 利用一维数组嵌套一维数组的方式创建二维数组: let arr = [] ; a[0] = [1,2,3,4,5,6]; a[1] = [10,20,30,40,50,60] 然后使用一个 双层for循环 就可以迭代这个二维数组中的元素 所以用这种方法创建多维数组,不管有几个维度,都可以通过嵌套循环来遍历 遇到问题的方法: ![请添加图片描

OceanH的博客 1142

【VUE】数据绑定,js数组赋值,多处使用时,一处修改,另一处也会被改变

vue中数据绑定,js数组赋值,多处使用时,一处修改,另一处也会被改变 问题描述如下: this.A = [1,2,3] var B = this.A B.push(4) var C = this.A console.log(C) 此时的C会得到 [1,2,3,4],而不是 [1,2,3] 解决办法: 1、 this.A = [1,2,3] var B = JSON.parse(JSON.stringify(this.A)) B.push(4) var C = JSON.parse(JSON.

LuviaWu的博客 692

一个数组赋值给另一个数组

把一个数组赋值给另一个数组 把数组map的内容全部赋值给另一个数组a,当一个数组a改变的时候,map也发生了变化,该如何解决? var map = new Array("china","america","japan","canada"); var a = map; a.unshift("aa"); console.log(a); console.log(map); // a 结果[ "aa", ...

qq_40178216的博客 3万+

数组互相赋值内存的变化

好多同学在工作中会遇到关于数组赋值的问题,比如循环数组a去操作a的值,却发现b的值也被修改了,很困惑,不明白为什么,下面大概讲一下我的理解,希望能够对大家有所帮助。 // 声明a,给a赋初始值,这个时候会在内存中给a分配一段空间,内容是a的值对应的内存空间的指针 var a = [ { key: 2, value: '1' } ]; // 声明b,把a赋值给b,这个时候会在内存中给b...

学如逆水行舟,不进则退! 732

在JavaScript中JSON数组作为变量赋值

​ 在 JavaScript 中,如果你把一个 JSON 数组赋值给另一个变量,实际上是将该数组的引用(地址)赋值给了新变量,而不是复制整个数组。这意味着新变量和原数组实际上是同一个数组对象,它们的内容会相互影响,当你修改其中一个数组中的元素时,另外一个数组中对应的元素也会发生改变,因为它们实际上是同一个元素。3、如果你希望复制一个数组而不是共享引用,可以使用【slice() 】 方法或扩展运算符 【…这样,新数组和原数组就是两个独立的数组对象,它们的内容不再相互影响。

weixin_44380380的博客 1777

js中的数组 两个数组值相同时 一个数组改变 另一个数组跟着改变原因

演示代码 deleteTimes: function () { //初始化数组arr1 let arr1=[1,2,3,4] //使arr2的值与arr1相等 let arr2 = arr1; //改变arr1的值 ...

u013675978的博客 5445
上一篇: 将多个Excel文件的第一个sheet合并为一个Excel文件中的多个sheet
下一篇: 新手用docker真**难受
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值