关于input框v-model绑定的数据push到新数组,值重复的问题

在开发中遇到一个需求,需要将自定义输入的题目和选项存入新数组并渲染,但发现每次push后数据重复。问题在于双向绑定的input导致所有值相同。解决方案是使用深克隆方法在push之前复制新对象,避免引用同一内存地址。在utils文件夹创建深克隆函数,然后在main.js中导入并使用,确保每次push的是独立的对象,从而解决了数据重复问题。
摘要由CSDN通过智能技术生成

关于inpu框绑定数据push到新数组,值重复的问题

最近写了一个需求,需要自定义输入题目跟选项,push到新数组,然后循环渲染出来,push之后发现,每项的值是重复的
在这里插入图片描述## 解决方法
是因为双向绑定的input,push之后在内存中的位置是一样的,导致了值也是一样的,在push前,深克隆一个对象就可以了,因为深克隆会在内存中重新生成一个内存地址保存数据,代码如下在这里插入图片描述在这里插入图片描述在utils文件夹中写一个js文件,然后写一个深克隆方法,代码如下

// 定义一个深拷贝函数  接收目标target参数
export function deepClone(target) {
  // 定义一个变量
  let result
  // 如果当前需要深拷贝的是一个对象的话
  if (typeof target === 'object') {
    // 如果是一个数组的话
    if (Array.isArray(target)) {
      result = [] // 将result赋值为一个数组,并且执行遍历
      for (const i in target) {
        // 递归克隆数组中的每一项
        result.push(deepClone(target[i]))
      }
      // 判断如果当前的值是null的话;直接赋值为null
    } else if (target === null) {
      result = null
      // 判断如果当前的值是一个RegExp对象的话,直接赋值
    } else if (target.constructor === RegExp) {
      result = target
    } else {
      // 否则是普通对象,直接for in循环,递归赋值对象的所有值
      result = {}
      for (const i in target) {
        result[i] = deepClone(target[i])
      }
    }
    // 如果不是对象的话,就是基本数据类型,那么直接赋值
  } else {
    result = target
  }
  // 返回最终结果
  return result
}

然后在main.js中 import { deepClone } from “@/utils/index”;导入,因为我是在index文件内写的方法,所以是这样导入的,

使用方法

直接调用这个方法把需要克隆的数据传入直接调用这个方法,把需要被克隆的值传入就可以啦,效果如下:
在这里插入图片描述在这里插入图片描述这样数据就不会重复啦,完美解决
因为我也是小白,第一次写文章记录开发过程中遇到的问题,若是有大佬觉得有不妥的地方,可以指点

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值