美文网首页
表单对象赋值

表单对象赋值

作者: PharkiLL | 来源:发表于2020-10-28 15:15 被阅读0次
/**
 * 表单对象赋值:
 * 对目标对象存在且源对象同样存在的属性,全部覆盖;
 * 目标对象不存在但是源对象存在的属性, 全部丢弃;
 * 目标对象存在但是源对象不存在的属性,如果是字符串赋值为空串,其余类型赋值为undefined
 */
export function recover (target, source) {
  if (target === undefined || target === null) { throw new TypeError('Cannot convert first argument to object') }
  var to = Object(target)
  if (source === undefined || source === null) { return to }
  var keysArray = Object.keys(Object(target))
  for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
    var nextKey = keysArray[nextIndex]
    var desc = Object.getOwnPropertyDescriptor(target, nextKey)
    if (desc !== undefined && desc.enumerable) {
      if (to.hasOwnProperty(nextKey)) {
        if (to[nextKey] instanceof Array) {
          to[nextKey] = source[nextKey]
        } else if (to[nextKey] instanceof Object) {
          recover(to[nextKey], source[nextKey])
        } else if (source[nextKey] !== undefined) {
          to[nextKey] = source[nextKey]
        } else if (typeof (to[nextKey]) === 'string') {
          to[nextKey] = ''
        } else {
          to[nextKey] = undefined
        }
      }
    }
  }
  return to
}

/**
 * 表单对象赋值:
 * 对目标对象存在且源对象同样存在的属性,全部覆盖;
 * 目标对象不存在但是源对象存在的属性, 全部丢弃;
 * 目标对象存在但是源对象不存在的属性,保留目标对象的属性不做处理
 */
export function recoverNotNull (target, source) {
  if (target === undefined || target === null) { throw new TypeError('Cannot convert first argument to object') }
  var to = Object(target)
  if (source === undefined || source === null) { return to }
  var keysArray = Object.keys(Object(target))
  for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
    var nextKey = keysArray[nextIndex]
    var desc = Object.getOwnPropertyDescriptor(target, nextKey)
    if (desc !== undefined && desc.enumerable) {
      if (to.hasOwnProperty(nextKey)) {
        if (to[nextKey] instanceof Array) {
          to[nextKey] = source[nextKey]
        } else if (to[nextKey] instanceof Object) {
          recover(to[nextKey], source[nextKey])
        } else if (source[nextKey] !== undefined) {
          to[nextKey] = source[nextKey]
        }
      }
    }
  }
  return to
}

相关文章

  • 表单对象赋值

  • Ant Design form 表单赋值,清空

    1:表单清空:this.form.resetFields();2:表单赋值:this.form.setFields...

  • 《ECMAScript 6 入门》笔记

    变量的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 对象的新增方法 表单验证...

  • FormData

    FormData对象 作用:1 模拟HTML表单,相当于HTML表单映射成表单对象,自动将表单对象中的数据拼接成请...

  • FormData对象

    FormData对象的作用 1.模拟HTML表单,相当于将HTML表单映射成表单对象,自动将表单对象中的数据拼接成...

  • 解构赋值

    解构赋值 数组的解构赋值 嵌套,默认值,展开符 对象的解构赋值 对象解构赋值的本质与简写 对象解构的模式与变量 对...

  • C++中 对象的赋值与复制

    赋值与拷贝 1、可以从调用形式上,对“对象的赋值”和“对象的复制”进行区分: 对象的赋值:指的是调用了类的赋值运算...

  • 菜鸟学习javascript19

    20.表单对象 获取表单对象: document.getElementById(); Document.forms...

  • 工作问题总结

    1、对象赋值问题(对象赋值影响原对象)直接用=的方式把一个对象赋值给另一个对象,会导致修改新对象时,原对象也发生变...

  • es6-解构赋值

    什么是解构赋值 左右一一对应进行赋值。 解构赋值的分类 数组解构赋值,左右都是数组 对象解构赋值,左右都是对象 字...

网友评论

      本文标题:表单对象赋值

      本文链接:https://www.haomeiwen.com/subject/prtcvktx.html