自定义校验及浅谈深拷贝和浅拷贝

通常我们在写过了初级校验后,有一些特殊的校验,需要我们自己设置,于是就要设置自定义校验.

1.基础校验规则

1.1定义验证规则

1.2配置模板,应用规则
给表单设置 rules 属性传入验证规则
给表单设置model属性传入表单数据
给表单中的元素(Form-Item )设置 prop 属性,其值为设置为需校验的字段名

1.3手动兜底验证

onSubmit() {
  // 表单验证
  this.$refs.form.validate(valid => { //返回布尔值,true通过,false不通过.
    if (valid) {//如果true通过
        this.isEdit ? this.doEdit() : this.doAdd() //判断是编辑还是新增.
    }
  })
}

2.自定义校验

这里推荐使用Element-ui的框架,可以直接复制使用

https://element.eleme.cn/#/zh-CN/component/form

做校验时需要的数据相对简单,并不需要把部门列表数据全部传递给子组件,这里做一些映射处理。也可以提高性能.

//我们只传递自己需要的数据,利用map映射出一个新的数组,里面只包含了ID,name,code
this.newList= res.data.depts.map(item=>{return {id, name,code}) 


//判断用户输入的值是否相同   数组.includes(元素): 检查这个元素在数组中是否存在
 newList.includes(value)   
        ? callback(new Error('编码' + value + '已经存在'))
        : callback()
    }

// filter过滤, map得到想要的数据
 newList = this.newList.filter(item => item.id !== this.id).map(item => item.code)

浅拷贝与深拷贝

拷贝:给定一个对象 ,复制一份一模一样独立的对象来。它又分成浅拷贝和深拷贝。

浅拷贝只能拷贝一层:如果对象中只有一层(对象的属性值不是对象与数组)它是可以正常工作了。
如果对象有多层(理解为多维数组)它就不能实现真正的 “拷贝”的功能了。

拷贝与浅拷贝只针对像 Object, Array 这样的复杂对象的。
浅拷贝是复制对象的引用,深拷贝是复制对象所引用的全部对象,将所有的属性复制一份出去生成一个副本存储在另一块空间中。
简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
js中存储对象存的是地址,浅拷贝时两个对象指向同一块内存,其中一个对象对内存的修改也会反应在另一个拷贝的对象上。

常见的浅拷贝:

  • Object.assign()

  • 扩展运算符。var cloneObj = { ...obj };

  • Array.prototype.slice()。slice() 方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。

  •  //声明深拷贝函数
        function kaobei(obj, newObj) {
          for (let key in obj) {
            //如果obj[key]是数组,还需要继续遍历拷贝数据
            if (obj[key] instanceof Array) {
              //1 给newObj声明空数组
              //2 循环遍历拷贝数组每一个元素
              newObj[key] = []
              // for (let i = 0; i < obj[key].length; i++) {
              //   newObj[key][i] = obj[key][i]
              // }
              kaobei(obj[key], newObj[key])
            } else if (obj[key] instanceof Object) {
              newObj[key] = {}
              kaobei(obj[key], newObj[key])
            } else {
              newObj[key] = obj[key]
            }
          }
        }
    //声明一个空对象,存储拷贝后的数据
        let newObj = {}
        kaobei(obj, newObj)
    
        newObj.name = '李四'
        newObj.hobby[0] = '游戏'
        console.log(obj, newObj)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Fastcopy功能特点 1.完全支持拖曳操作,支持拖曳多个文件到来源中; 2.支持外壳整合,方便利用右键菜单直接复制文件; 3.支持三种不同的HDD模式; 4.内建多种人性化的操作模式; 5.支持过滤,可以使用通配符; 6.支持任务管理; 7.支持命令行操作; 8.软件十分小巧,甚至可以在安装后,直接将安装目录中的文件复制到任何可移动存储设备中,方便携带,随取随用; 9.所有的复制操作都是通过“从介质(硬盘)读数→写入数→从缓存中读出→向介质(硬盘)写入数”这几项步骤来完成的,并且这些步骤都是多个线程同时进行的,如果线程之间的协同运作不够完美,那速度就会大打折扣,有些线程忙得要命,而有些却必须等待,FASTCOPY就是优化了它们之间的工作顺序,大大提高了速度。 10.易于使用,能够充分挖掘文件系统和硬盘的传输能力。 11.支持计数和计时,在很多专业的硬盘传输速度的评测中,FastCopy 成了不二之选! Fastcopy使用 1、指定源目录、目标目录 点击“源目录”、“目标目录”可以分别为其指定要复制的内容及目标文件夹。复制的内容可以是文件夹或文件。目标目录结尾键入“\”表示拷贝时要包括源目录本身及其内容;结尾不键入“\”表示只拷贝源目录下的内容。 用拖拽的方式同样可以指定源目录、目标目录。这样很方便,随着在资源管理器中浏览就可以将复制对象确定下来。另外,可以通过“设置”菜单中的“外壳扩展”为右键菜单建立“复制”与“删除”命令。 2、选择不同的操作方式 通过“目标目录”文本框下的下拉菜单按钮就可以挑选七种不同的操作方式。这里,复制项相对多些,都是在复制时经常会遇到的处理办法。 “移动”项是将“源目录”内容移动到“目标目录”中去,源目录内容消失;“全部删除”项是关闭“目标目录”,只对源目录内容进行处理。对于固定拷贝的操作可以建立一个任务,通过“任务菜单”菜单中的“添加/更新/删除”命令创建,方便一键就可复制或删除。 3、常规设置、硬盘模式定义 在“设置→常规设置”菜单中可以定义缓存的空间大小,它直接关系到复制时的速度快慢,现在机器配置都很强悍,这里设定值高些不成问题。相关的定义有I/O缓存设置、I/O设置、复制和删除、日志写入等项目。 硬盘模式的设置是为了在读写时对缓存的操作方式,默认下为自动硬盘模式,另外两种分别是相同硬盘模式、不同硬盘模式,可以根自己机器的配置来选择。相同硬盘模式是指用大的缓存进行读入,直到缓存满额,再转入大缓存写入;不同硬盘模式则是读写缓存多线程并行进行。 4、执行后的结果查询 在执行过程中会显示读取、写入、时间、传输效率、文件速率等信息,在下方的文本框中会显示当前拷贝的内容。拷贝完成后点击“显示列表”按钮可以查看拷贝内容及错误文件、目录信息。 软件对于拷贝和删除小文件或文件夹来讲,可能就有点大材小用了。对于大型的文件和文件夹就不同了,它能非常迅速的完成要拷贝的内容,通过简单的设置还能过滤不要的内容。体积小、方便携带、操作迅速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值