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

【Javascript】如何硬拷贝一个数组?

答案是使用splice。以下面这句代码为例:

boxList.splice(0, boxList.length, ...theRoom.boxes);

这行代码的作用是 彻底清空 boxList 数组,然后将 theRoom.boxes 数组中的所有元素逐个添加到 boxList 中。

让我们分解一下这行代码:

  1. boxList: 这是一个数组变量。

  2. .splice(): 这是 JavaScript 数组的一个非常强大的方法,用于改变数组的内容——可以删除、替换或添加元素。它的基本语法是:
    array.splice(startIndex, deleteCount, item1, item2, ...)

    • startIndex: 必需。从哪个索引位置开始修改数组。
    • deleteCount: 必需。要从 startIndex 位置开始删除多少个元素。
    • item1, item2, ...: 可选。要从 startIndex 位置开始添加的元素。
  3. 0 (第一个参数):

    • 这是 startIndex。表示从 boxList 数组的第一个元素(索引为 0)开始操作。
  4. boxList.length (第二个参数):

    • 这是 deleteCount。表示从索引 0 开始,删除 boxList 中所有现有的元素。因为 boxList.length 就是数组的当前长度,所以这个参数会删除从开头到结尾的所有元素。
    • 效果:清空 boxList 数组。
  5. ...theRoom.boxes (第三个及后续参数):

    • 这是使用 扩展运算符 (Spread syntax ...)
    • theRoom.boxes 应该也是一个数组(或任何可迭代对象)。
    • 扩展运算符 ... 会将 theRoom.boxes 数组中的所有元素“展开”或“解构”成独立的参数。
      • 例如,如果 theRoom.boxes[box1, box2, box3],那么 ...theRoom.boxes 就会变成 box1, box2, box3
    • 这些独立的元素会被 splice 方法作为要添加的新元素,插入到 startIndex (即索引 0) 的位置。
    • 效果:将 theRoom.boxes 中的所有元素添加到已经被清空的 boxList 数组中。

总结起来,这行代码做了两件事:

  1. 删除所有现有元素: boxList.splice(0, boxList.length) 这部分清空了 boxList
  2. 添加新元素: , ...theRoom.boxes) 这部分将 theRoom.boxes 中的所有元素复制到 boxList 中。

最终效果:boxList 数组的内容被完全替换为 theRoom.boxes 数组的内容。

为什么这么做,而不是直接 boxList = theRoom.boxes;

如果直接使用 boxList = theRoom.boxes;boxList 变量将指向一个新的数组(即 theRoom.boxes 所在内存地址)。
但如果 boxList 是通过引用传递给其他函数的,或者其他变量也持有 boxList 的引用,那么通过 splice 方法修改 boxList 会改变 原始数组 的内容,所有持有该数组引用的地方都会看到更新。而直接赋值会使这些旧引用仍然指向旧的(现在已经失去引用的)数组。

splice 这种方式确保了在不改变 boxList 变量本身内存地址(即它引用的对象)的情况下,更新了该数组的内容。

http://www.dtcms.com/a/564958.html

相关文章:

  • 少儿编程不止学技术:6 大学习习惯的蜕变与思维能力的跃迁
  • 自动驾驶运动规划 | 基于自行车模型的运动学模型和横向动力学模型详细推导图解
  • 软文营销的技巧有哪些网站建设和优化内容最重要性
  • 我局在网站建设方面wordpress 搜索没反应
  • C语言基础之函数指针4
  • 深入浅出 Java 虚拟机之进阶部分
  • 医疗保健|医疗养老|基于Java+vue的医疗保健系统(源码+数据库+文档)
  • 网站建设方案书组网方案网站攻击
  • Python循环
  • 基于自适应傅里叶分解(AFD)及其改进算法的信号分解与重构实现
  • Linux Shell awk
  • iBM(i2)图表数据优化及重点人员分析(三)
  • 做两个一摸一样的网站有没有专门做家乡图片的网站
  • Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1
  • Dify 插件开发与打包教程 (Mac)
  • FastMCP 入门:用 Python 快速搭建 MCP 服务器接入 LLM
  • 常见DGX A100服务器维修故障问题及解决方法
  • Linux系统编程——exec函数族
  • 简单搭建express服务器
  • 设置网站建设大连专业网站设计服务商
  • Ollama + Open WebUI
  • 张家界市建设工程造价管理站网站好看的ui界面
  • 【WEB应用安全】XSS攻击实验全流程实战!从漏洞检测到Cookie窃取(附Payload解析+避坑指南)
  • Linux系统启动流程深度解析:从BIOS到用户空间的全链路指南
  • AI编程工具TRAE解决日常问题之SQLite数据复制
  • 百度网盘下载速度被限制怎么办?百度网盘如何解除限速下载方法
  • 多协议网关架构
  • 深入级联不稳定性:从 Lipschitz 连续性视角探讨图像恢复与目标检测的协同作用
  • 如何实现html显示WebRTC视频监控流
  • 长沙网站设计服务商wordpress和vue