新数据不影响原来的数据

问题描述

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

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

在这里插入图片描述

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

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

相关文章

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

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

MQTT在linux下服务端和客户端的应用

MQTT(Message Queuing Telemetry Transport)是一种轻量级、开放标准的消息传输协议,设计用于受限设备和低带宽、不稳定网络的通信。 MQTT的一些关键特点和概念: 发布/订阅模型: MQTT采用发布/订阅(Publ…

编译原理本科课程 专题5 基于 SLR(1)分析的语义分析及中间代码生成程序设计

一、程序功能描述 本程序由C/C编写,实现了赋值语句语法制导生成四元式,并完成了语法分析和语义分析过程。 以专题 1 词法分析程序的输出为语法分析的输入,完成以下描述赋值语句 SLR(1)文法的语义分析及中间代码四元式的过程,实现…

基于tomcat的https(ssl)双向认证

一、背景介绍 某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据)&#x…

【大厂AI课学习笔记】1.5 AI技术领域(1)计算机视觉

人工智能的三大基础应用领域是,自然语言处理,语音识别,计算机视觉。 计算机视觉:定义、关键技术、技术发展、应用场景与商业化成功 一、计算机视觉的定义 计算机视觉,作为一个跨学科的领域,旨在研究如何让…

ArcGIS Pro 按照字段进行融合或拆分

ArcGIS Pro 按字段融合 在ArcGIS Pro中,通过使用“融合”工具可以轻松地合并具有相同字段的图层。 步骤一:打开ArcGIS Pro 启动ArcGIS Pro应用程序,确保您已经登录并打开您的项目。 步骤二:添加图层 将包含相同字段的图层添加到…

【Linux】信号-上

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 👉🏻信号的概念与产生jobs命令普通信号和实…

牛客网-------------------------长方体

解题思路: 设棱长为x,y,z;假设已知面积为a,b,c 那么,xya;yzb;xzc; 一式除二式得x/za/b x(a/b)*z 联立xzc 代入得(a/b)z^2c z^2c*b/a z根号下&…

Windows自动化实现:系统通知和任务栏图标自定义

文章目录 Windows自动化的三个小工具系统通知任务栏图标使用pystray实现使用infi.systray实现 Windows自动化的三个小工具 系统通知 import win10toastwin10toast.ToastNotifier().show_toast("eee", "休息一下", icon_path"icon.ico", durati…

服务器和云计算之间有什么关系?

云计算与服务器之间的关系是密切而复杂的。首先,我们需要明确一点,云计算并不是一种全新的技术,而是对现有技术的一种整合和改进。在这个基础上,我们可以更好地理解云计算与服务器之间的关系。 服务器是云计算的重要组成部分之一…

2024/02/04

1.请编程实现双向链表的头插,头删、尾插、尾删 //双向链表头插 DoubleLink insert_head(DoubleLink head,datatype element) {//创建新节点DoubleLink screate();s->dataelement;//链表为空if(NULLhead)heads;else{s->nexthead;head->prevs;heads;}return…

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…

Leetcode—33. 搜索旋转排序数组【中等】

2024每日刷题&#xff08;110&#xff09; Leetcode—33. 搜索旋转排序数组 实现代码 class Solution { public:int search(vector<int>& nums, int target) {int n nums.size();int l 0, r n - 1;while(l < r) {int m l (r - l) / 2;if(nums[m] target) …

【Django开发】美多商城项目第3篇:用户注册和图片验证码开发(附代码,文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

配置visualsvn提交后自动邮件通知

参考&#xff1a; https://blog.csdn.net/wiker_yong/article/details/10334967 # -*- coding: utf-8 -*- import sys import os import smtplib from email.mime.text import MIMEText from email.header import Headermail_host smtp.163.com #发送邮件的smtp地址 mail_us…

[SWPUCTF 2021 新生赛]easyupload1.0

发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag

[c++]多态的原理

引言 OOP的核心思想是多态性。多态性这个词源自希腊语&#xff0c;其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型&#xff0c;因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C语言支持多态性的…

算法练习-环形链表(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;链表 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

数据库主从加读写分离

1. 规划节点 mysql1------192.168.200.8------主数据库节点 mysql2------192.168.200.13------从数据库节点 mycat------192.168.200.21------数据库中间件节点 2. 基础准备​ 使用OpenStack平台创建两台云主机进行试验&#xff0c;云主机使用提供的CentOS_7.5_x86_64_XD.qc…

neo4j查询id为null

今天在neo4j里执行一条查询语句时&#xff0c;发现id属性查询不出来显示为null 后来了解到&#xff0c;Neo4j 默认情况下并不提供一个名为 id 的属性。通常情况下&#xff0c;Neo4j 中的节点都有一个内部的唯一标识符&#xff0c;但是这个标识符并不以 id 的形式暴露给用户。 …