新数据不影响原来的数据

news2024/11/24 20:45:25

问题描述

新数据修改时,原来的数据也会受影响

const obj1 = ref({ name: 'slx', age: 20 })
  const obj2 = obj1

  obj2.value.name = 'hhhh'
  console.log('obj1', obj1.value)
  console.log('obj2', obj2.value)

在这里插入图片描述

解决方法 (仅适用于对象

在这段代码中,obj1obj2 指向同一个响应式对象,因此修改 obj2 中的属性会同步反映到 obj1 中,导致原始对象被修改。如果需要修改 obj2 而不影响到 obj1,可以尝试以下 3 种方法:

  1. 手动复制新的对象

    const obj2 = ref({ ...obj1.value })
    obj2.value.name = 'hhhh'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式通过手动复制每个属性来创建一个新的对象,确保 obj1obj2 不再引用同一个对象,从而实现修改 obj2 而不影响 obj1
    在这里插入图片描述

  2. 使用 Object.assign 复制对象

    const obj2 = ref(Object.assign({}, obj1.value))
    obj2.value.name = 'hhhh'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式使用 Object.assignobj1 中的属性复制到一个新的对象中,并将其赋值给 obj2。由于 Object.assign 会创建一个新的对象,因此 obj1obj2 引用的是不同的对象,修改 obj2 不会影响到 obj1
    在这里插入图片描述

  3. 使用 lodash 库的 clone 方法复制对象

    import { clone } from 'lodash'
    const obj2 = ref(clone(obj1.value))
    obj2.value.name = 'hhhh'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式使用 lodash 库中的 clone 方法来复制对象。由于 clone 会创建一个新的对象,因此 obj1obj2 引用的是不同的对象,修改 obj2 不会影响到 obj1

希望这些方法能够帮助你解决问题。如果还有其他问题,请随时提问。

数组解决方法

问题描述

当数据是数组包对象时,就不好用

 const arr1 = ref([
    { id: 1, name: 'slx', count: 2 },
    { id: 2, name: 'slx', count: 8 }
  ])
  //   const obj2 = obj1
  const arr2 = ref([...arr1.value])

  arr2.value[0].name = '庆余年'

  console.log('arr1', arr1.value)
  console.log('arr2', arr2.value)

在这里插入图片描述

解决👇

在这段代码中,obj1obj2 都是响应式对象,并且指向同一个数据数组。因此,修改 obj2 中的数据会同步反映到 obj1 中,导致原始数据被修改。如果需要修改 obj2 而不影响到 obj1,可以尝试以下 方法:

  1. 手动复制新的数据对象

    const obj2 = ref([
      { ...obj1.value[0] },
      { ...obj1.value[1] }
    ])
    obj2.value[0].name = '庆余年'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式通过手动复制每个数据对象来创建一个新的数组,确保 obj1obj2 不再引用同一个数据对象,从而实现修改 obj2 而不影响 obj1
    在这里插入图片描述

  2. 使用 JSON 序列化和反序列化复制数组

    const obj2 = ref(JSON.parse(JSON.stringify(obj1.value)))
    obj2.value[0].name = '庆余年'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式使用 JSON 序列化和反序列化操作来复制数组,即先将 obj1 转换为 JSON 字符串,再将其解析为数组对象。由于这个过程中会创建一个新的数组对象,因此 obj1obj2 引用的是不同的数组对象,修改 obj2 不会影响到 obj1

  3. 使用 lodash 库的 cloneDeep 方法复制数组

    import { cloneDeep } from 'lodash'
    const obj2 = ref(cloneDeep(obj1.value))
    obj2.value[0].name = '庆余年'
    console.log('obj1', obj1.value)
    console.log('obj2', obj2.value)
    

    这种方式使用 lodash 库中的 cloneDeep 方法来深度复制数组。由于 cloneDeep 会创建一个新的数组对象,因此 obj1obj2 引用的是不同的数组对象,修改 obj2 不会影响到 obj1

希望这些方法能够帮助你解决问题。如果还有其他问题,请随时提问。

简单的数组

使用 Array.from 复制数组

const array1 = ref([1, 2, 3, 4])
//   const array2 = array1
const array2 = ref(Array.from(array1.value))
array2.value[0] = 13234
console.log('array1', array1.value)
console.log('array2', array2.value)

这种方式使用 Array.from 将 array1 中的数据复制到一个新的数组中,并将其赋值给 array2。由于 Array.from 会创建一个新的数组对象,因此 array1array2 引用的是不同的数组对象,修改 array2 不会影响到 array1

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习(生成式模型)—— Consistency Models

文章目录 前言预备知识:SDE与ODEMethod实验结果 前言 Diffusion model需要多次推断才能生成最终的图像,这将耗费大量的计算资源。前几篇博客我们已经介绍了加速Diffusion model生成图像速率的DDIM和Stable Diffusion,本节将介绍最近大火的Co…

idea中找到所有的TODO

idea中找到所有的TODO (1)快捷键 Alt6 (2)View -> Tool Windows -> TODO

【GameFramework框架】二、GameFramework框架介绍

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程

说明: 安装与卸载中,用户全部切换成为 root,一旦安装,普通用户就能使用。 一、卸载内置环境 1、卸载不要的环境 [rootVM-8-5-centos ~]$ ps ajx | grep mariadb # 先检查是否有mariadb存在 13134 14844 14843 13134 pts/0 14843…

ASP.NET Core 预防开放式重定向攻击

写在前面 为预防钓鱼网站的常用套路,在进行 Web 应用程序的开发时,原则上应该将所有由用户提交的数据视为不可信。如果应用程序中包含了基于 URL 内容重定向的功能,需要确保这种类型的重定向操作只能在应用本地完成,或者明确判断…

STM32F407 CAN参数配置 500Kbps

本篇CAN参数适用 芯片型号:STM32F407xx系统时钟:168MHz,CAN挂载总线APB1为42M波 特 率 :500Kpbs引脚使用:TX_PB9,RX_PB8;修改为PA11PA12后,参数不变。 步骤一、打勾开启CAN&#xf…

SpringCloud-搭建Eureka服务模块

在构建分布式微服务体系中,搭建Eureka服务模块是实现服务注册与发现的关键一步。Spring Cloud作为领先的微服务框架,通过Eureka为我们提供了高效的服务治理能力。本文将深入探讨如何使用Spring Cloud,逐步引导读者完成Eureka服务模块的搭建。…

Qt基础-QFrame控件详解

概述 QFrame继承于QWidget,被QLCDNumber、QToolBox、QLabel、QListView等部件继承,是一个拥有矩形框架的基类。 QFrame可以直接创建成一个没有内容的的矩形框架,框架的样式由边框厚度(lineWidth)、框架形状(QFrame::Shape)和阴影样式(QFrame::Shadow)决定,下图是官网给出的…

JAVA毕业设计126—基于Java+Springboot+Vue的二手交易商城管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的二手交易商城管理系统(源代码数据库)126 一、系统介绍 本项目前后端分离,本系统分为管理员、用户两种角色 1、用户: 注册、登录、…

如何有效的开展接口自动化测试(超详细整理)

一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&…

事务和连接池配合使用存在的问题

文章目录 前言例子结果源码 前言 今天讨论一个问题,如果全部方法都加上事务,会不会有问题? 前两天看到一个老项目,xml方式的配置,拦截了所有的方法,增加了事务,不能说它的做法有问题&#xff…

〔Part1〕YOLOv5:原理+源码分析(配置文件、网络模块、损失函数、跨网格匹配策略)

1. 前置知识 1.1 YOLO 算法的基本思想 首先通过特征提取网络对输入图像提取特征,得到一定大小的特征图,比如 13x13(相当于416x416 图片大小),然后将输入图像分成 13x13 个 grid cells: YOLOv3/v4&#xf…

WebAssembly002 IDBFS 浏览器文件存储

1.文件系统 文件系统 API官方文档 https://emscripten.org/docs/api_reference/Filesystem-API.htmlJavaScript 通常在 Web 浏览器的沙盒环境中运行,没有 直接访问本地文件系统。Emscripten 模拟了一个文件系统。要访问的文件应预加载或嵌入到虚拟文件系统中。 2.…

从奥迪Quattro到碧然德:揭秘技术品牌成功打造与推广的秘诀

在当前全球化和信息化快速发展的背景下,技术品牌的打造不仅是企业竞争力提升的重要途径,也是企业实现长远发展的基石。通过深入剖析,我们认识到,技术品牌的建设并非一蹴而就的过程,而是需要企业准确把握市场趋势&#…

全球十大优质黄金期货交易平台app软件排行榜(2024版)

对于选择黄金期货交易平台app软件,有几个关键因素需要考虑。首先是app平台的声誉和信誉度;其次是app平台的交易费用和手续费。 第三是app平台的交易品种和交易功能;第四是app平台的安全性和风险控制措施;最后还要考虑app平台的客…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架

论文标题:A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载,如作业到达率和用户请求率,对于云计算中的资源管理和弹性非常关键。然而,设计一个通用的工作负载预测器…

Redis核心技术与实战【学习笔记】 - 24.Redis 数据分片方案选择:Codis 和 Redis Cluster

简述 Redis 的切片集群使用多个实例保存数据,能很好的应对大数据量的场景。在《4.Redis 切片集群》中,介绍了 Redis 官方提供的切片集群方法 Redis Cluster。本章,再来学习下,在 Redis Cluster 方案正式发布前,业界广…

C#,纽曼-康韦数(Newman Conway Number)的算法与源代码

John Henrry Newman 1 纽曼-康韦数 纽曼-康韦数(Newman Conway Number)序列是生成以下整数序列的序列。 1 1 2 2 3 4 4 4 5 6 7 7… 在数学上,纽曼-康韦数的序列P(n)由递推关系定义: (1) P&#xff08…

【C++历练之路】二叉搜索树的学习应用及其实现

W...Y的主页 😊 代码仓库分享💕 前言🍔: 我们之前学过一些查找关键数据的办法,排序二分查找。但是这种方法的插入的时间复杂的太高,今天我们来学习一个更好的办法来应对数据查找——二叉搜索树。 目录…

深入实战:ElasticSearch的Rest API与迭代器模式在高效查询中的应用

在我们公司,大多数Java开发工程师在项目中都有使用Elasticsearch的经验。通常,他们会通过引入第三方工具包或使用Elasticsearch Client等方式来进行数据查询。然而,当涉及到基于Elasticsearch Rest API的/_sql?formatjson接口时,…