当前位置: 首页 > news >正文

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.lryc.cn/news/224895.html

相关文章:

  • 8 STM32标准库函数 之 实时时钟(RTC)所有函数的介绍及使用
  • ARMday04(开发版简介、LED点灯)
  • 国际腾讯云:云服务器疑似被病毒入侵问题解决方案!!!
  • Perl语言用多线程爬取商品信息并做可视化处理
  • 认识计算机-JavaEE初阶
  • you-get - 使用代码下载视频
  • 【Proteus仿真】【51单片机】汽车尾灯控制设计
  • 浙大恩特客户资源管理系统任意文件上传漏洞复现
  • 史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
  • GCC + Vscode 搭建 nRF52xxx 开发环境
  • Linux应用开发基础知识——Framebuffer 应用编程(四)
  • 智安网络|数据库入门秘籍:通俗易懂,轻松掌握与实践
  • EXCEL中安装多个vsto插件,插件之间互相影响功能,怎么解决
  • Java枚举
  • 基于MATLAB的关节型六轴机械臂轨迹规划仿真
  • 双11狂欢最后一天
  • YOLOX: Exceeding YOLO Series in 2021(2021.8)
  • HBuilderX 运行Android App项目至雷电模拟器
  • Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析
  • 续:将基于Nasm汇编的打字小游戏,移植到DOSBox
  • 外部访问K8S集群内部的kafka集群服务
  • AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘解决办法
  • 物奇平台耳机恢复出厂设置功能实现
  • RFID携手制造业升级,为锂电池生产带来前所未有的可靠性
  • 【星海出品】flask (四) 三方工具使用
  • MongoDB 索引
  • [Hive] INSERT OVERWRITE DIRECTORY要注意的问题
  • 刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新
  • DHorse(K8S的CICD平台)的实现原理
  • 类图复习:类图简单介绍