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>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDF Expert for mac(苹果电脑专业pdf编辑器)兼容12系统

PDF Expert是macOS平台上的一款优秀的PDF阅读和编辑工具&#xff0c;由Readdle公司开发。它不仅拥有方便、易用的界面&#xff0c;还具备诸多功能&#xff0c;比如编辑PDF文件、添加批注、填写表格、签署文件、合并文档等。安装:PDF Expert for Mac(PDF编辑阅读转换器)v3.5.2中…

HT6819 3.3W 防削顶低EMI立体声 D类音频功率放大器

HT6819的防削顶失真功能可检测并抑Z由于音乐、语Y信号幅度过大或电池电压下降所引起的输出削顶失真&#xff08;破音&#xff09;&#xff0c;显著提高音质&#xff0c;创造舒适的听音享受&#xff0c;并保护扬声器免受过载损坏。通过在ACRC端外接不同电阻电容值,可灵活设置放大…

C++引用和指针的区别

C引用和指针的区别 引用是一种更加安全的指针 1、引用必须初始化&#xff0c;指针可以不初始化&#xff1b; 2、由下图可以看出&#xff0c;定义一个指针和引用在汇编阶段是一模一样的&#xff1b; 通过引用变量修改所引用的内存的值和通过指针解引用修改指针指向内存的值&…

CAS200 CLS216 基于图形用户界面的快速应用程序开发

CAS200 CLS216 基于图形用户界面的快速应用程序开发 最新的Sapera Vision软件套件包括萨佩拉加工和新的星形胶质细胞铥人工智能(AI)的图形应用。该软件套件提供经过现场验证的图像处理和人工智能功能&#xff0c;用于设计、开发和部署高性能机器视觉应用。 这个最新版本的Sape…

chrome driver下载、selenium安装及报错解决

目录 一、Chrome驱动下载 1.查看Chrome版本 2.下载驱动 3.驱动的路径 无法运行驱动 二、selenium的安装与使用 1.安装selenium 2.使用selenium 参考 一、Chrome驱动下载 1.查看Chrome版本 打开Chrome浏览器&#xff0c;点击右上角的三个点&#xff0c;再点击设置。 …

07-MySQL-进阶-锁InnoDB引擎MySQL管理

涉及资料 链接&#xff1a;https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码&#xff1a;Coke 一、锁 ①&#xff1a;概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xf…

详解机器学习最优化算法

前言 对于几乎所有机器学习算法&#xff0c;无论是有监督学习、无监督学习&#xff0c;还是强化学习&#xff0c;最后一般都归结为求解最优化问题。因此&#xff0c;最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中&#xff0c;小编将对机器学习中所使用的…

SpringCloud——服务注册——Eureka

1.Eureka概述 2.Eureka架构&#xff1a; Eureka中80服务要实现对8001和8002服务访问的负载均衡&#xff0c;需要在80服务的RestTemplate上面加LoadBalanced注解&#xff0c;默认采用的是轮询的策略。 3.Eureka自我保护 当一个EurekaClient注册进EurekaServer&#xff0c;Eurek…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包&#xff0c;点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式&#xff0c;创建关联&#xff0c;最后…

卓越进行时 | 赛宁助力职业院校实践“岗课赛证训创”育人模式

11月7日&#xff0c;赛宁网安邀请南京城市职业学院网络安全学科师生走进网络安全卓越中心&#xff0c;为大一新生提供“职业导学” 和“岗位认知”的综合性实践课程&#xff0c;帮助学生提升对于网络安全专业和未来职业的认知水平&#xff0c;进一步深化校企合作人才培养的持续…

基于SSM的高校疫情防控出入信息管理系统(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的高校疫情防控出入信息管理系统&#xff08;有报告&#xff09;。Javaee项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff1a; 采…

CodeWhisperer--轻松使用一个超级强大的工具!

CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 CodeWhisperer 有以下几个主要用途&#xff1a; 解决编程问题&#xff0c;提供代码建议&#xff0c;学习编程知识等等&#xff0c;并且 CodeWhisperer 会…

MySQL(7):单行函数

不同DBMS函数的差异 内置函数&#xff1a; 系统内置的通用函数。 自定义函数&#xff1a; 根据自己的需要编写的函数。 大多数 DBMS 使用&#xff08;||&#xff09;或者&#xff08;&#xff09;来做拼接符&#xff0c;而在 MySQL 中的字符串拼接函数为concat()。 大部分 D…

【java】【MyBatisPlus】【四】【完】MyBatisPlus一些实战总结(枚举、翻页、sql、组合条件、自增主键、逻辑删除)

目录 一、枚举 1、数据库type字段是Integer 类型枚举 2、创建一个该字段的枚举类 TypeEnum 3、修改实体类 4、配置文件新增mybatis-plus的配置 5、检验&#xff1a; 5.1 查询显示 5.3 库里验证 二、自增主键不是id字段处理 三、逻辑删除字段不是delete字段处理 1、实…

Android - 编译 openssl 踩坑之路

一、简述 如果你想快速在项目中使用上 openssl,可以使用网上其他开发者提供好的预编译库: OpenSSL(All):https://builds.viaduck.org/prebuilts/openssl/OpenSSL(3.1.*) :https://github.com/217heidai/openssl_for_android以上的预编译库可能最低只支持 API 21(即 Andro…

基于Kinect 动捕XR直播解决方案 - 技术实现篇

一 安装与部署 1. 安装与部署Kinect-v2设备: 安装硬件: Kinect-v2设备带线一台; Kinect-v2 原装适配器适配器组合件设备一台; Kinect-v2 USB 3.0 WIndows PC 一天&#xff0c;原主板支持USB3.0接口; Windows PC 系统 Win10( Win 10 Version 21H2更新, 基于x64系统), 特别…

必看:一组WhatsApp2023年数据合集,助你深入洞察WS营销

作为一款遍布全球的超级应用&#xff0c;WhatsApp以高人气、广覆盖和高效便利收获了几十亿用户&#xff0c;也无数次连接了用户与企业。对于WhatsApp运营布局&#xff0c;客观数据能为企业提供多方面的依据和判断。本文将从多个维度展示WhatsApp2023年数据&#xff0c;希望能为…

Spring Boot 统一处理功能

目录 1.用户登陆权限验证 1.1 每个方法验证 1.2 Spring AOP 用户统一登陆验证 1.3 拦截器 1.3.1 自定义拦截器 1.3.2 将自定义拦截器配置到系统设置中&#xff0c;并且设置拦截规则 1.3.3 排除所有的静态资源 1.4 登录拦截器&#xff08;练习&#xff09; 1.5 拦截器原…

全网短视频平台视频下载神器软件,可以下载网页上的视频、音频、直播、回放、课程 【视频下载脚本+教程】

软件介绍&#xff1a; 这是一款可以下载全网大多数平台视频的软件&#xff0c;可以帮助用户轻松下载网页上的视频、直播、回放、课程等&#xff0c;也可以支持下载MP3音乐文件、图片。 目前支持的平台有&#xff1a;淘宝、抖音、快手、哔哩哔哩、虎牙、斗鱼、京东、京喜、小红…

《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; BSP视频教程第28期&#xff1a;CANopen协议栈专题&#xff0c;CANopen主从机组网实战&a…