uni-app:js实现数组中的相关处理-数组复制

一、slice方法-浅拷贝

使用分析

  • 创建一个原数组的浅拷贝,对新数组的修改不会影响到原数组
  • slice() 方法创建了一个原数组的浅拷贝,这意味着新数组和原数组中的对象引用是相同的。因此,当你修改新数组中的对象时,原数组中相应位置的对象也会受到影响。

 原始数据

①对数组的项直接进行修改,不会影响原数组

效果展示

复制原数组,对新数组的第一项进行替换

修改首项输出数据

 核心代码

const newArray = array.slice();
newArray[0] = {id: -1,name: '被修改项',age: 18};  //对新数组进行修改

完整代码

<template>
	<view>
	</view>
</template>
<script>
	export default {
		data() {
			return {

			}
		},
		methods: {

		},
		onLoad() {
			const array = [{
					id: 0,
					name: '张三',
					age: 18
				},
				{
					id: 1,
					name: '李四',
					age: 28
				},
				{
					id: 2,
					name: '王五',
					age: 38
				},
				{
					id: 3,
					name: '赵六',
					age: 48
				}
			];		
			const newArray = array.slice();
			newArray[0] = {id: -1,name: '被修改项',age: 18};  //对新数组进行修改
			console.log("原数组",array); // 原数组
			console.log("新数组",newArray); // 打印数组,可以看到新的对象被成功添加
			
		}
	};
</script>
<style>

</style>

②对数组项中的对象进行修改,会影响原数组

效果展示

复制原数组,对新数组的第一项对象的name值进行修改

修改数组中第一个对象的name输出值

核心代码

const newArray = array.slice();
newArray[0].name = '修改具体对象值的name';     //对新数组的对象进行修改

完整代码

<template>
	<view>
	</view>
</template>
<script>
	export default {
		data() {
			return {

			}
		},
		methods: {

		},
		onLoad() {
			const array = [{
					id: 0,
					name: '张三',
					age: 18
				},
				{
					id: 1,
					name: '李四',
					age: 28
				},
				{
					id: 2,
					name: '王五',
					age: 38
				},
				{
					id: 3,
					name: '赵六',
					age: 48
				}
			];		
			const newArray = array.slice();
			newArray[0].name = '修改具体对象值的name';//对新数组的对象进行修改
			console.log("原数组",array); // 原数组
			console.log("新数组",newArray); // 打印数组,可以看到新的对象被成功添加	
		}
	};
</script>
<style>

</style>

二、concat方法-浅拷贝

使用分析

  • 同slice的使用类似
  • 创建一个原数组的浅拷贝,并返回一个新数组,对新数组的修改不会影响到原数组。
  • concat() 方法创建了一个原数组的浅拷贝,这意味着新数组和原数组中的对象引用是相同的。因此,当你修改新数组中的对象时,原数组中相应位置的对象也会受到影响。

原始数据

①对数组的项直接进行修改,不会影响原数组

效果展示

复制原数组,对新数组的第一项进行替换

修改首项输出数据

 核心代码

const newArray = array.concat();
newArray[0] = {id: -1,name: 'concat被修改项',age: 18};  //对新数组进行修改

完整代码

<template>
	<view>
	</view>
</template>
<script>
	export default {
		data() {
			return {

			}
		},
		methods: {

		},
		onLoad() {
			const array = [{
					id: 0,
					name: '张三',
					age: 18
				},
				{
					id: 1,
					name: '李四',
					age: 28
				},
				{
					id: 2,
					name: '王五',
					age: 38
				},
				{
					id: 3,
					name: '赵六',
					age: 48
				}
			];		
			const newArray = array.concat();
			newArray[0] = {id: -1,name: 'concat被修改项',age: 18};  //对新数组进行修改
			console.log("原数组",array); // 原数组
			console.log("新数组",newArray); // 打印数组,可以看到新的对象被成功添加
			
		}
	};
</script>
<style>

</style>

 ②对数组项中的对象进行修改,会影响原数组

效果展示

复制原数组,对新数组的第一项对象的name值进行修改

修改数组中第一个对象的name输出值

核心代码

const newArray = array.concat();
newArray[0].name = 'concat修改具体对象值的name';   //对新数组的对象进行修改

完整代码

<template>
	<view>
	</view>
</template>
<script>
	export default {
		data() {
			return {

			}
		},
		methods: {

		},
		onLoad() {
			const array = [{
					id: 0,
					name: '张三',
					age: 18
				},
				{
					id: 1,
					name: '李四',
					age: 28
				},
				{
					id: 2,
					name: '王五',
					age: 38
				},
				{
					id: 3,
					name: '赵六',
					age: 48
				}
			];		
			const newArray = array.concat();
			newArray[0].name = 'concat修改具体对象值的name';//对新数组的对象进行修改
			console.log("原数组",array); // 原数组
			console.log("新数组",newArray); // 打印数组,可以看到新的对象被成功添加
			
		}
	};
</script>
<style>

</style>

三、使用展开运算符(Spread Operator)-浅拷贝

使用分析

  • 同前面几种浅拷贝的使用类似
  • 创建一个原数组的浅拷贝,并返回一个新数组,对新数组的修改不会影响到原数组。
  • 展开运算符 方法创建了一个原数组的浅拷贝,这意味着新数组和原数组中的对象引用是相同的。因此,当你修改新数组中的对象时,原数组中相应位置的对象也会受到影响。

语法

const newArray = [...array];

使用方法完全同上,不再举例

四、使用Array.from-浅拷贝

使用分析

  • 同前面几种浅拷贝的使用类似
  • 创建一个原数组的浅拷贝,并返回一个新数组,对新数组的修改不会影响到原数组。
  • Array.from方法创建了一个原数组的浅拷贝,这意味着新数组和原数组中的对象引用是相同的。因此,当你修改新数组中的对象时,原数组中相应位置的对象也会受到影响。

语法

const newArray = Array.from(array);

使用方法完全同上,不再举例

五、解决修改对象时原数组修改的问题-深拷贝(这里使用JSON 序列化和反序列化)

解决这种问题可以采用深拷贝,在 JavaScript 中,实现深拷贝最简单的方法是使用JSON.parse(JSON.stringify(array))

效果展示

复制原数组,对新数组的第一项对象的name值进行修改

修改数组中第一个对象的name输出值

核心代码

const newArray = JSON.parse(JSON.stringify(array));
newArray[0].name = '修改具体对象值的name';//对新数组的对象进行修改

完整代码

<template>
	<view>
	</view>
</template>
<script>
	export default {
		data() {
			return {

			}
		},
		methods: {

		},
		onLoad() {
			const array = [{
					id: 0,
					name: '张三',
					age: 18
				},
				{
					id: 1,
					name: '李四',
					age: 28
				},
				{
					id: 2,
					name: '王五',
					age: 38
				},
				{
					id: 3,
					name: '赵六',
					age: 48
				}
			];		
			const newArray = JSON.parse(JSON.stringify(array));
			newArray[0].name = '修改具体对象值的name';//对新数组的对象进行修改
			console.log("原数组",array); // 原数组
			console.log("新数组",newArray); // 打印数组,可以看到新的对象被成功添加
			
		}
	};
</script>
<style>

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/122712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-94. 二叉树的中序遍历(C++)

目录捏 一、题目描述二、示例与提示三、思路四、代码 一、题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 二、示例与提示 示例 1&#xff1a; 输入&#xff1a; root [1,null,2,3] 输出&#xff1a; [1,3,2] 示例 2&#xff1a; 输入&#xf…

亚马逊云科技产品测评』活动征文|通过使用Amazon Neptune来预测电影类型初体验

文章目录 福利来袭Amazon Neptune什么是图数据库为什么要使用图数据库什么是Amazon NeptuneNeptune 的特点 快速入门环境搭建notebook 图神经网络快速构建加载数据配置端点Gremlin 查询清理 删除环境S3 存储桶删除 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转…

Stable Diffusion webui 源码调试(三)

Stable Diffusion webui 源码调试&#xff08;三&#xff09; 个人模型主页&#xff1a;LibLibai stable-diffusion-webui 版本&#xff1a;v1.4.1 内容更新随机&#xff0c;看心情调试代码~ shared 变量 shared变量&#xff0c;简直是一锅大杂烩&#xff0c;shared变量存放…

Kubernetes 中 RBAC、ServiceAccount 的区别和联系

Author&#xff1a;rab 目录 前言一、区别二、联系三、案例思考&#xff1f; 前言 首先&#xff0c;Kubernetes (K8s) RBAC (Role-Based Access Control) 和 ServiceAccount 都是 Kubernetes 中用于控制访问权限的两个重要概念&#xff0c;但是它们之间有一些区别和联系。 一…

【ES专题】Logstash与FileBeat详解以及ELK整合详解

目录 前言阅读对象阅读导航前置知识笔记正文一、ELK架构1.1 经典的ELK1.2 整合消息队列Nginx架构 二、LogStash介绍2.1 Logstash核心概念2.1.1 Pipeline2.1.2 Event2.1.3 Codec (Code / Decode)2.1.4 Queue 2.2 Logstash数据传输原理2.3 Logstash的安装&#xff08;以windows为…

微信总提示空间不足怎么办?三个方法随心选!

微信显示空间不足会给用户带来很多困扰&#xff0c;比如影响手机的正常使用&#xff0c;占用大量存储空间&#xff0c;导致手机运行缓慢&#xff0c;没法分享图片和视频&#xff0c;影响我们的社交交流。下面提供了一些简单实用的方法。 方法一&#xff1a;清理微信缓存 1、打…

ElasticSearch的集群、节点、索引、分片和副本

Elasticsearch是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。为了方便大家理解&#xff0c;我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比 ES里的Index可以看做一个库&#xff0c;而Types相当于表&#xff0c;Documents则相当…

AD9371 Crossbar

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

农产品展示预约小程序的内容是什么

农产品可以分为多个类目&#xff0c;对农场、农产品经销商家来说&#xff0c;除了线下开店外&#xff0c;线上也同样不能放松经营&#xff0c;面对线下多种困境&#xff0c;运用线上发展可以节约人力物力成本&#xff0c;提升整体经营效率。 1、品牌传播展示难 农产品种类较多…

PageHelper多表关联查询数量问题

PageHelper多表关联查询数量问题 通常我们会使用PageHelper进行分页查询&#xff0c;但是当分页查询被用到多个表的关联查询中时&#xff0c;就有可能导致查询出来的数据总数比我们想要的多得多。 首先在数据库中创建三个demo表&#xff1a;role、path、role_path role角色表…

C# 压缩PDF文件

PDF 文件可以包含文本、图片及各种媒体元素&#xff0c;但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件&#xff0c;能够有效减小文件大小&#xff0c;从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件&#xff0c;下面是实…

Perl语言用多线程爬取商品信息并做可视化处理

首先&#xff0c;我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后&#xff0c;我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中&#xff0c;我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…

C语言数据结构-----单链表(无头单向不循环)

前言 本篇讲述了单链表的相关知识&#xff0c;以及单链表增删查改的代码实现。 文章目录 前言1.链表1.1 链表的结构和概念 2.(增删查改)单链表的实现2.1 打印链表2.2 尾插2.3 尾删2.4 头插2.5 头删2.6 查找2.7 在指定位置(pos)前插入2.8 在指定位置(pos)删除2.9 在指定位置(p…

梓航DIY无限建站-3.5.8(企业官网 应用首页 PC建站 14套模板切换,自由组合页面,无限多开)

梓航DIY无限建站是一款支持无限建站的公众号应用。 自定义网址 全局样式设置 极速建站 更灵活 更方便。 1、默认页面指定设置&#xff0c;更灵活、更方便&#xff1b; 2、全局样式设置&#xff0c;减少页面重复设置工作&#xff1b; 3、不限数量网站制作装修&#xff08;想做…

台式电脑一键重装Win10系统详细教程

很多用户都在使用台式Win10电脑办公&#xff0c;如果电脑出现系统问题无法解决了&#xff0c;这时候就可以考虑给电脑重装系统哦&#xff0c;下面小编给大家详细介绍关于台式电脑一键重装Win10系统的步骤方法&#xff0c;安装后电脑就能恢复正常&#xff0c;也不会影响到用户的…

Kyligence Copilot 亮相第六届进博会,增添数智新活力

11月5日&#xff0c;第六届中国国际进口博览会&#xff08;以下简称“进博会”&#xff09;在上海国家会展中心盛大启幕&#xff0c;众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康&#xff08;AstraZeneca&#xff09;合作伙伴&#xff0c;跬智信息&#xff08;Kyli…

FastGPT | 3分钟构建属于自己的AI智能助手

这是一篇使用指南&#xff01;&#xff01;&#xff01; FastGPT是什么&#xff1f; FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&…

第22章_数据库的设计规范

文章目录 范式的概念三范式范式一范式二范式三 反范式总结 范式的概念 为了建立冗余较小、结构合理的数据库&#xff0c;设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库&#xff…

Zookeeper选举Leader源码剖析(上)

为什么要看源码&#xff1a; 1、 提升技术功底&#xff1a; 学习源码里的优秀设计思想&#xff0c;比如一些疑难问题的解决思路&#xff0c;还有一些优秀的设计模式&#xff0c;整体提升自己的技术功底 2、 深度掌握技术框架&#xff1a; 源码看多了&#xff0c;对于一个新技…

类EMD的“信号分解方法”及MATLAB实现(第九篇)——小波包变换(WPT)/小波包分解(WPD)

在上一篇我们讲到了离散小波变换DWT&#xff0c;在建立了小波分解的基本概念后&#xff0c;我们现在转向小波包分解——一种更精细的小波分析方法。小波包分解在多分辨率分析的基础上&#xff0c;提供了一种全面的频率分析工具&#xff0c;这在许多复杂信号处理场合中被证明是极…